0


1

私のプロジェクトを.NET 2.0から3.5に変換し、3.5フレームワークを利用して実行できる最適化を探しています。 データ構造のように3.5で私ができることのいくつかは何ですか。 LINQ to SQL以外のDataAccessの使用に関する提案もあります。 任意の提案/ポインタは素晴らしいでしょう。 私は特定の最適化を見ているのではなく、単に一般的なものです。 私もVB.NETを使用しています:(

5 Answer


4


あなたはVB.Netでイテレータを書くことができないので、これはいくぶんC#に依存しています。 しかし、私にとって大きなパフォーマンスの向上は、Iterator Extension Methodのラムダ式コンボです。 イテレータは .Net 2.0 as well, but when you combine them with the IEnumerable 拡張メソッドあなたは突然、非常に強力な最適化ツールを手に入れました。

たとえば、ファイルを読み、特定のテキストを含むすべての行を取得するコードがあるとします。 .Net 2.0では、 `+ File.ReadAllLines +`を使用するか、ストリームリーダーを反復処理します。 .NET 3.5では、ストリームリーダーをイテレータで囲み、次のようなコードを書くことができます。

ReadLines(@"C:\MyFile.txt").Where(l => l.Contains("search text") );
Net 2.0でそれに近づくようなコードを書くことができるので、これはそれほど特別なことではありません。 しかし本当に素晴らしいことは、フィルタを追加し続けることができるということです。
var query = ReadLines(@"C:\MyFile.txt")
                            .Where(l => l.Contains("search text") )
                            .Select(l => int.Parse(l.SubStrin(5,8))
                            .Where(i => i > 10 );

int sum=0;
foreach (int value in query)
{
    sum += value;
}

ポップクイズ - そのコードがファイルの結果に対して何回繰り返されるか 答えはちょうど1つです。 新しい `+ .Where()`または ` .Select()+`を追加しても、結果が再びループすることはありません。 むしろ、それは実行を延期してあなたの列挙型のための一種のパイプラインを作成します。

NET 2.0で同様のパフォーマンスを得るには、ファイルの開閉を含むもっと長い関数を書くか、IEnumerableを実装するためのはるかに複雑なクラスを持つか、ほとんどのプログラマが考えないカスタムデリゲートを多用する必要があります。わかりません。

これにより、非常に単純で再利用可能な方法でファイルを読み取るコードを抽象化して、効率的なコードを書くのに適した言語にすることができます。 面白いのは、あなたがVB.Netからこれを利用することができるということです:あなたが書きたいイテレータを保つためにどこかにC#アセンブリを持っていなければなりません、そしてあなたのVB.Netコードはこのようになります:

Dim query = ReadLines("C:\MyFile.txt") _
                      .Where(Function(l) l.Contains("search text") ) _
                      .Select(Function(l) Integer.Parse(l.SubString(5,8) ) _
                      .Where(Function(i) i > 10 )

Dim sum As Integer = 0
For Each value As Integer In query
    sum += value
Next value


3


最適化とはどういう意味ですか。 あなたは少し明確にすることができますか?

3.5フレームワークとそれに対応するVB.Netコンパイラは、最適化についてはそれほど重要ではありませんでしたが、LINQ(言語統合クエリ)を取り巻く概念についてはそれ以上のものでした。 これは、多少SQLに似た、一般的なクエリ言語を定義する方法で、さまざまなソースで使用できます。

たとえば、あなたが生徒のリストを持っていて、特定の名前を持っている生徒をつかみたいとしましょう。 LINQの前にあなたは次のような何かを書くでしょう

cur.Name = SomeNameの場合はcol内の各curの新しいリスト()としてのDimリスト。次にlist.Add(cur)の場合は終了

LINQはこれをあなたに次のように書かせることによって非常に単純化します

薄暗い結果= from cur in colここで、cur.Name = SomeName


2


このリンクから、VB 9.0のすべての新機能が一目でわかります。

  • 暗黙的に型指定されたローカル変数

  • オブジェクトと配列の初期化子

  • 匿名型

  • 深いXMLサポート

  • クエリー内包拡張

  • メソッドとラムダ式

  • NULL可能タイプ

  • リラックスした参加者


1


VB 9には、クールなXMLプリミティブ型があります。

Dim book As XElement = _> <%= modifiedDate%>

これはかなりクールです! ( msdnから取得したコード)


0


2.0でリモート処理またはシリアル化を使用している場合は、今すぐWCFリモート処理/シリアル化に切り替えることができます。また、読んだものからパフォーマンスが大幅に向上します。