私が実行した場合、次のコードは、私の記憶の上に何の影響も与えないだろうと述べている:なぜオブジェクトをインスタンス化するのは、そのオブジェクトが使用されるまで実行されないのですか? C#ので
Console.WriteLine("press a key to allocate the memory");
Console.ReadKey();
double[] hudgeBunchOfMemory = new double[100000000];
Console.WriteLine("allocated");
Console.ReadKey();
しかし、私は、配列を反復処理し、それらを使用する場合、割り当てはちょうどこののように、実行されますサンプル:
Console.WriteLine("press a key to allocate the memory");
Console.ReadKey();
double[] hudgeBunchOfMemory = new double[100000000];
for (long i = 0; i < 100000000; i++)
{
hudgeBunchOfMemory[i] = i + 1;
}
Console.WriteLine("allocated");
Console.ReadKey();
何がこの動作を生成しますか?私は、リリースとデバッグモードの両方でのVisual Studio 2012でコードをルーン文字が刻まれている、と私は、タスクマネージャでメモリの変化を述べてきた、そしてそれがかかるので、それは違いを観察本当に単純なことができ
EDIT
800メガバイトのメモリ。
はそれが、この動作について、最も適切な質問は:コードが実行され、メモリはまだalocatedない、またはそれがまったく実行されず、JITコンパイラによって回避しますか?
ヒント - コンパイラはかなりスマートです。 –
リリースモードとデバッグモードで実行し、適切なツールを使用してメモリを測定します。あなたはここに不可欠な情報を提供しません。 –
訂正:ランタイムはかなりスマートです。コンパイラは、設計上、そうではありません。コンパイラは、すべてのメモリを割り当てるコードを喜んで発行します。最適化されず、生成されたCILコードを調べると、それが表示されます。 – hvd