2020年1月28日火曜日

.NET Coreのメモリ上限サイコーです。.NET Frameworkだと1オブジェクト2GBの制限がある。

昔、さるロジックでFile.ReadAllXXX()で苦労したことを思いだしました。

.NET Coreの場合、12.1GBのオブジェクトが使用できました。
   

.NET Frameworkの場合、1.5GBのオブジェクトとなっています。

補足
あくまでも1オブジェクトの最大サイズです。
それ以外のスコープでは別の制限となります。

検証ロジック
class OutOfMemory
{
internal void Run()
{
var c = EnumetableOutOfMemory().ToList().Count;
WriteLine($"Data Size={c}");
}

IEnumerable<int> EnumetableOutOfMemory()
{
while (true)
{
yield return 1;
}
}
}

そういえば、App.configを↓のようにして頑張ってメモリを多く使えるようにチャレンジしたこともあります。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
    </startup>
   <runtime>
     <gcAllowVeryLargeObjects enabled="true"/>
     <generatePublisherEvidence enabled="false"/>
     <legacyCorruptedStateExceptionsPolicy enabled="true"/>
     <loadFromRemoteSources enabled="true"/>
     <nodeRunnerSettings memoryLimitMegabytes="0"/>
     <NGenReserveForJumpStubs value="25" />
   </runtime>
</configuration>

0 件のコメント:

コメントを投稿