2010-12-30 3 views
-1

可能性の重複:
Performance of anonymous types in C#匿名の種類は遅いですか?

は、宣言タイプよりも遅い匿名型はありますか?例えば

Dim score = CalculateScore() 

より

Dim score as Double = CalculateScore() 

実行遅くなるのでしょうか?

明示的な入力が遅くないのはなぜですか?

+1

あなたはどういうことを言っていますか?あなたの質問には匿名のタイプはありません。最初の例では、関数を呼び出すように見えますが、2番目の例では、関数を指す代理変数を代入するだけです。あなたはリンゴとオレンジを比較しています。あなたの質問は何ですか? –

+9

これは「匿名タイプ」という意味ではありません。 – Jay

+1

Option Inferをオフにすると、適切な状況下で実行時パフォーマンスの問題を引き起こす可能性のあるバリアントオブジェクトが生成されます。 – asawyer

答えて

1

いいえ、匿名型または推測型の速度に違いはありません。

しかし、ダイナミックタイプについては、少し遅くなるかもしれません。

あなたの(第二)のサンプルコードは、「シンタックスシュガー」はdouble

4

アン暗黙に型付けされた変数であると決定され、コンパイル時になりscoreを意味し、推論されたタイプを示唆しています。どちらの方法でも同じコードにコンパイルされるため、実行時のパフォーマンスには影響しません。

なぜ明示的な宣言を使用するのですか?

開発者または組織のスタイル/優先度/標準の問題です。コードの中には、より明確なものや意図的なものがあるものもあります。

レコードの場合、匿名型(そこには二重引用符はありません)は、インラインで宣言された型、または見た目に応じて「オンザフライ」です。それは名前がないので匿名です。関連するデータを保持するのに便利な一時オブジェクトです。

VBでは、Dim anon = New With { .Name = "Moderator71", .Id = 19 }を呼び出して宣言します。 任意で、プロパティをKeyと宣言できます。

1

なぜ明示的な入力を使用しますか?

可読性は1つかもしれません。

1

CalculateScore関数がdoubleを返すと仮定します。

いいえ、それは逆です。それをDoubleと宣言することは、常に可能な限り速くなるでしょう。宣言を省略すると、Option Infer Onが有効になっているときだけ速くなります。そうでなければ、Object型の変数になります。ダブルはボックスに入れられます。

Unboxingは、Doubleだけでなく互換性のあるタイプにアンボックスすることができるので、VB.NETではかなり高価です。不一致があれば例外をスローするC#とは異なります。

0

明示的な型定義と推論を使用する理由は、実行時からコンパイル時に多くのバグが移動するためです。 IDEのおかげで、コンパイル時のバグを数秒で修正できます。実行時にバグが発生した場合、誰かがその特定のコード行を実行する前に数ヶ月または数年かかることがあります。あるいは、ユーザーが毎日それを打つかもしれませんが、戻ってくるまでに時間がかかるかもしれません。私はその時の爆弾と呼ぶ。あなたはどこでいつ出るかわからない。

私の1番目の目標は、爆発しないコードを書くことです。したがって、コンパイル時のバグは素晴らしいです。

関連する問題