0

myData というリストがあり、リスト内のすべての要素に特定のメソッド (someFunction) を適用したいと考えています。オブジェクトのコンストラクターを介してメソッドを呼び出すと、特定のオブジェクトのインスタンス化に対して同じメソッドを何度も呼び出すよりも遅くなりますか?

言い換えれば、これは次のとおりです。

for(int i = 0; i < myData.Count; i++)
    myClass someObject = new myClass(myData[i]);

これより遅い:

myClass someObject = new myClass();
for(int i = 0; i < myData.Count; i++)
    someObject.someFunction(myData[i]);

?

もしそうなら、どれくらい遅くなりますか?

4

3 に答える 3

1

さらに高速にすることができます。静的メソッドを使用する場合は、Visual Studio2010のCodeAnalisysを使用してください。静的メソッドの候補である場合は、警告が表示されます。

于 2010-06-14T23:57:17.637 に答える
1

前者のアプローチでは、プロセスのワーキング セットが大幅に増加する可能性があります。また、Windows にメモリ負荷がかかり、他のアプリがディスクにスワップ アウトされる可能性もあります。

また、作成する新しいオブジェクトは収集のために追跡されるため、CLR ガベージ コレクターに大きな負担がかかります。

どれだけ遅くなるかは、作成するオブジェクトのサイズと数に大きく依存します。

于 2010-06-14T23:18:32.307 に答える
0

パフォーマンスの観点からは、オブジェクトのインスタンス化とガベージ コレクションの追加のオーバーヘッドがないため、コードの 2 番目のブロックの方が高速になる可能性が高くなります。

于 2010-06-14T23:18:12.510 に答える