1

私は擬似コードでこのようなものを動作させるアプリケーションを持っています:

DisplayPrettyUI()
DoABunchOfReportingWorkThatAllocatesHundredsOfMB()
GC.Collect() //Free up the memory used in generating the report
DisplayReport()

コレクトコールを完全に取り除くことはできません。そうすると、レポートを表示するためのUIコンポーネントのみをホストするアプリにもかかわらず、レポートが生成された後、プロセスが1GBを超えるメモリを保持するためです。時間。同時に、Collectへの呼び出しは「臭い」のようです。そして、そこに行かずにこのケースを処理する何らかの方法がなければならないようです。

この匂いを取り除くことは可能ですか?(これを解決するためにAppDomainのようなものへの言及を聞いたことがありますが、これまでAppDomainを使用したことがなく、ガベージコレクターに対してどのようなセマンティクスがあるのか​​本当にわかりません...)

4

2 に答える 2

2

Optimized の GCColletionMode フラグを指定して GC.Collection を呼び出すことができるため、その時点で必ずしもガベージ コレクションを強制する必要はありません。必要でない場合、GC はそれを遅らせることができます。

AddMemoryPressure も見てください。ここにいくつかのアイデアがあります。

于 2012-07-29T22:23:48.090 に答える
1

通常、これに対処する方法は、使用しているツールに応じて、レポートを個別のスレッドまたは物理プロセスに分割することです。

リソースを大量に消費し、クラッシュするとアプリケーション全体がダウンする傾向があるサードパーティのレポート ツールがいくつかあります。それらを独自のプロセスにスピンオフすることで、潜在的な損傷を分離し、リソースの制限を維持するのに十分なだけインスタンス化することができますが、それでもユーザーの要求に応答できます。

そうは言っても、これがあなたのアプリケーションに適していない場合でも、あなたの状況で Collect を使用しても問題はないと思います。

于 2012-07-29T18:21:41.673 に答える