2009-06-01 20 views
3

私は、コードの最適化について、そのvb.netの専門家に謙虚に尋ねたいと思います。ここの例はVB.Netコードの最適化?

です。

Dim lblEventCategory = CType(Me.gvSpecialEvent.Rows(e.NewEditIndex).FindControl("lblEventCategory"), Label) 

b。

Dim lblEventCategory As Label = CType(Me.gvSpecialEvent.Rows(e.NewEditIndex).FindControl("lblEventCategory"), Label) 

どちらの方が効率的ですか?または文字B?

誰かが私にこれらのコードを理解するのに役立つことができますか?予め

答えて

0

おかげで最初のものは、バリアント型として変数lblEventCategoryを定義します。これは通常、明示的な型を使用する2番目の場合より悪いです。 Variant型は、すべての型の変数を安全に保持できる一種の「catch all」ですが、コンパイラがあなたに与える可能性のあるすべての型の安全性と警告を失います。また、Variant型は、より多くのメモリを使用し、実行する必要がある変換のため実行時に遅くなります。

さらに、メソッド呼び出しは「遅延バインド」となります。つまり、実行時までこれらのメソッドの呼び出しが解決されず、変数の型がわかっていれば名前で呼び出されます。これは、呼び出しを「初期バインド」(つまり、コンパイル時)にできる明示的な型を使用する場合よりも、天文学的に通常は遅くなります。

一方、バリアント型にはその役割があります。バリアント型のみをサポートするVBScriptなどの言語とやりとりする場合は、OLEオートメーション(COM)プログラミングに役立ちます。その状況では、コールの境界でVariant型が正しい型に変換されるように、呼び出しを後でバインドされたコードにラップすることをお勧めします。

+0

間違っています。 vb2008より前のバージョンは、バリアントではなくObject型として定義されています。 vb2008(Option Infer Onと仮定)はラベルとして定義されています。 – ggf31416

+0

VB.NETにはバリアント型のようなものはありません。 –

4

私たちが話しているのは.Net 3.5よりも1800 INFORMATIONは、型推論が行われ、コンパイラが型を推定して型保証されるので真実ではないと言っています。 .Net 3.5ではaとBは同じです。

Visual Studio 2008では、Option Inferをオンまたはオフにするだけでその違いを確認できます。

.Net 3.5より前には、型の推論は行われず、バリアント型またはオブジェクト型が使用されます。 pre.Net 3.5 AとBは同じではありません。

+2

In vb2008型推論は言語機能であり、フレームワークのバージョンに依存しません。 .net 2.0がターゲットにされている場合、型推論は変更されません。 – ggf31416

2

.NET 3.5 Dim x = valueはC#var x = valueと同じです。コンパイラは型を推論して、両方が実行時に等しいようにします。

+0

chrissie1の答えにggf31416のコメントを参照してください。 Visual Studio 2008では、型推論はフレームワークのバージョンに関係なく機能します(はい、.Net 2.0を対象としていても動作します)。 – chyne