54395


C#のWindowsフォームアプリケーションを作っています。  
ビルド環境はVisual Studio 2010です。

数百件のバッチ処理を行っており、  
LocalReportによる画像帳票の作成や、  
WPFによる画像変換を行っています。

処理件数に応じて使用メモリ（プライベートワーキングセット）が増えていきます。  
ハンドル数、ユーザーオブジェクト数、GDIオブジェクト数は増えません。

メモリリークの可能性もあるかと思い、  
処理件数とメモリの利用状況をログに取りました。

すると、200件程度までは処理件数に応じてメモリを消費していきますが、  
800MBぐらいで頭打ちになり、そこからは使用メモリ量が増えません。

このような場合、メモリリークを疑うべきでしょうか。  
それともヒープ領域が空いている場合は、  
なるべくメモリを使おうとしていると解釈すべきでしょうか。


CC BY-SA 4.0
2019-04-22T08:59:09.950
54390
2019-04-22T10:47:28.333
2019-04-22T09:04:19.580
8647
8647
question
c# .net
C#のメモリ使用量について


Visual Studio 2015 Update
1以降であれば、[使用メモリを簡単にプロファイル](https://docs.microsoft.com/ja-
jp/visualstudio/profiling/memory-
usage?view=vs-2017)できます。特に.NETの場合、具体的なクラス名も把握できます。800MBの内訳を確認したり、指定した２つの時刻におけるオブジェクトの増減などを調べることでリークかどうか判断できます。

第三者からは状況が分かりませんので、Visual Studioをバージョンアップし、ご自身で調査されることをお勧めします。


CC BY-SA 4.0
2019-04-22T09:16:36.910
54391
2019-04-22T09:16:36.910
4236
54390
answer


LocalReportのオブジェクトが削除されずにヒープに残っているのが問題でした。  
以下の設定をapp.configに追加することによって、メモリの使用量は激減しました。

[code]

    <runtime>
        <NetFx40_LegacySecurityPolicy enabled="true"/>
    </runtime>
    
[/code]

参考URL：  
<https://stackoverflow.com/questions/6220915/very-high-memory-usage-in-
net-4-0/34184809#34184809>


CC BY-SA 4.0
2019-04-22T10:47:28.333
54395
2019-04-22T10:47:28.333
8647
54390
answer