多くのスレッドでいくつかのコマンドを実行したいとしましょう。C#continue/break leaking memory
for (int i = 0; i < 5000; i++)
{
new Thread(() =>
{
while (true)
{
string foo = "foo " + DateTime.Now.Ticks;
bool breakout = false;
for (int j = 0; j < random.Next(10, 100); j++)
{
string bar = "bar " + DateTime.Now.Ticks;
if (j == 5)
{
continue;
}
if (j == 8)
{
breakout = true;
break;
}
}
if (breakout)
{
continue;
}
string baz = "baz " + DateTime.Now.Ticks;
}
}).Start();
}
このコード例は、5Kのスレッドを作成し、いくつかの文字列を設定し、私に関する限りメモリをリーク:私はこのコード例はあるだろう。コードが実行されるにつれて、メモリ使用量はより高くクロールされます。 これは、変数を設定して放棄しているためだと思います。メモリ使用量が増えることなく、継続して休憩できる方法はありますか?
あなたは決して終了しない5000個のスレッドを作成しています。あなたは記憶を漏らしています。 –
あなたのタイトルは「非難する」と思われます。 「新しい文字列を連続的に作成する5000スレッドを実行している」ということが原因である可能性は高いですか? (私の推測では、あなたのCPUは非常に重く、GCが実行する機会を得られないということです)。 –
'if(j == 5)continue;'部分は必要ありません。いずれにせよ、ループは関係なく継続します。 –