2017-05-03 18 views
1

変数@countが10未満の場合、ストリームに0の配列を書き込む方が全体的なパフォーマンスによってより好ましいですか?私は最初のメソッドでは、アロケータとガベージコレクタの過剰な負荷が心配です。一方、.netで短命のオブジェクトを作成するには、大幅に最適化する必要があります。複数の短命オブジェクトの作成

void Main() 
{ 
    using(var ms = new MemoryStream()){ 
     Method1(ms, 5); 
     Method2(ms, 5); 
    } 
} 

void Method1(MemoryStream ms, int count){ 
    ms.Write(new byte[count], 0, count); 
} 

static byte[] PreallocatedBuffer = new byte[1024]; 
void Method2(MemoryStream ms, int count){ 
    ms.Write(PreallocatedBuffer, 0, count); 
} 
+1

https://ericlippert.com/2012/12/17/performance-rant/、http://james.newtonking.com/archive/2015/12/20/json-net-8- 0-release-1-allocation-and-bug-fixes、http://stackoverflow.com/questions/7086484/in-a-loop-should-i-reuse-a-single-class-instance-or-create- new-ones – CodeCaster

+0

私はすべてのボトルネックを解消しましたが、プログラムには永久的なメモリ割り当てがたくさんあります。ここに問題があります。私はプロファイリングの技術を知らないが、合成テストを行うことは意味がない。したがって、私はメモリの大規模な割り当てでドットネットの物事の一般的な状態を知ることに興味があります。 リンクのおかげで、それは私の役に立つだろう。 – IPShuvaev

+0

_ "私は問題がどこにあるのか正確に言うことはできません" _まだ問題は見られませんでした。 –

答えて

0

ガベージコレクションを呼び出すことができる場合があります。あなたは(定期的ではないと)突然なるオブジェクトの多くを持っている場合、これらはよく(例:あなたは大きなファイルを閉じる)役に立たないこの記事

https://blogs.msdn.microsoft.com/ricom/2004/11/29/when-to-call-gc-collect/

によって記述されている、手動でガベージコレクションを呼び出すことであると思われます悪い考えではない

関連する問題