0

私は c# (.NET) でソケット プロジェクトに取り組んでいます。いくつかのクラス(パケット)でデータを処理しています。データが着信している場合のメモリ使用量を調べていると、上がっています! つまり、クラスを作成します。(手動) クラスと未使用の変数/クラスをメモリから削除するにはどうすればよいですか (GC を使用しないでください!)。

データ受信だけといった基本的なことをやってみると、また上がってしまいます。この時点で、メモリからクラス/変数を完全に削除/削除したい!

誰でも助けることができますか?

4

2 に答える 2

6

できません。C# ではオブジェクトを手動で削除することはできません。ガベージ コレクターがこれを自動的に行っていない場合は、オブジェクトをどこかに保持している可能性があります。プロファイラーを使用して場所を見つけ、コードを修正します。

于 2013-03-19T13:07:23.160 に答える
3

手動で行うことができない利点と痛み (状況によっては) 。強制してもGC.Collect()、空きメモリを確保できるとは限りません。

さらに、メモリ クリーンアップ リクエストはrequestであるため、すぐに発生するのではなく、多少遅れて発生する可能性があります。

したがって、.NET オブジェクトの割り当てについて話している場合、メモリをクリーンアップする唯一の方法はCLR、オブジェクトをクリーンアップし、他のオブジェクトがそれらを指していない状態のままにしておくことです。

  • もしそうなら、それらを収集するまで待ちGCます(世代によって異なります)

  • 手動で を呼び出しますGC.Collect()。推奨されていませんが、使用することもできます。ちなみに、メモリが消去されるという保証はありません。

詳細については、ガベージ コレクションのジェネレーションとは何ですか?

于 2013-03-19T13:10:06.013 に答える