サーバーでこのエラーが発生しています。
System.InsufficientMemoryException、mscorlib、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089
536870912 バイトのマネージ メモリ バッファの割り当てに失敗しました。使用可能なメモリ量が少ない可能性があります。
これは、最後のステートメントreturn myCollectionの後に発生します。myCollection が約 45k アイテムの場合。
サーバー構成:
<binding name="LargeTCPBinding"
closeTimeout="00:30:00"
openTimeout="00:30:00"
receiveTimeout="01:00:00"
sendTimeout="01:00:00"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647">
<readerQuotas maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
基本的なメモリ プロファイリングGC.GetTotalMemory(false)を実行しましたが、コレクションをメモリに格納した後の差は約 170 MB です。
コレクションを返した後に例外が発生します(したがって、送信のバッファリング中に発生するようです)。
wcf 接続構成をStreamedに切り替えると、例外は修正されますが、呼び出しは 25 秒から 1:05 分になります。
そのコレクションはそれほど大きくないので、ここで何が起こっているのかを理解しようとしています. これは、WCF 4.0、64 ビット CPU で実行されています。