2

アプリが x64 に対してビルドされている場合、System.OutOfMemoryException とタスク マネージャーで消費されるメモリを確認したいと考えています。アプリのプロパティの [ビルド] タブには、"プラットフォーム ターゲット" と "プラットフォーム" の 2 つのドロップダウンがあり、どちらも x64 に設定されています。

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<long> lst = new List<long>();
            while (true)
            {
                lst.Add(long.MaxValue);
            }
        }
    }
}

確かに OutOfMemoryException が表示されています...しかし、停止すると、タスク マネージャーは 1587443K のような数値を表示します。これは、x86 に対してビルドされた場合に予想される 1.5 GB です。はい、オペレーティング システムは 64 ビットです。

私は何か他のものを忘れていますか?

4

1 に答える 1

5

私は何か他のものを忘れていますか?

はい-.NET4では、オブジェクトあたり2GBの制限がありました。(はるかに多くのメモリを使用できますが、単一のオブジェクトでは使用できません。)リストは内部バッファーを再割り当てする必要があり、単一の配列で最大3GBが必要になると思われます。

構成パラメーターを設定すると、.NET4.5がより大きなオブジェクトをサポートすると聞いて喜ぶかもしれません。<gcAllowVeryLargeObjects>

于 2012-10-31T15:59:14.850 に答える