デバイスの 1 つを制御し、このデバイスからの信号に反応する C# のアプリケーションがあります。
基本的に、アプリケーションはスレッドを作成し、操作 (データベースへのアクセスなど) を処理し、このデバイスと通信します。
アプリケーションの実行中、オブジェクトを作成して解放します。これまでのところ、ガベージ コレクターにメモリの処理を任せています。干渉せずにGCに処理をさせることを強くお勧めします。
今私たちが直面している問題は、アプリケーションのプロセスが徐々に成長し、永遠に成長することです。例:
アプリケーションが成長しているときに「波」があるように見え、突然、アプリケーションがメモリを解放しますが、同時にメモリ リークが発生するようです。
いくつかのメモリ プロファイラーを使用してアプリケーションを調査しようとしていますが、ガベージ コレクターがどのように機能するかを深く理解したいと考えています。
- ここで優れた記事を見つけました:大きなオブジェクトの危険性
- ここで公式ドキュメントも見つけました:MSDN
皆さんは、GC に関する別の非常に深いドキュメントを知っていますか?
編集 :
アプリケーションの動作を示すスクリーンショットを次に示します。
非常に規則的なパターンで発生している「波」効果をはっきりと見ることができます。
補助的な質問:
GC コレクション 2 ヒープが非常に大きく、アプリケーションで使用される合計バイト数と同じパターンに従っていることがわかりました。私たちのオブジェクトのほとんどは、少なくとも 2 つのガベージ コレクション (たとえば、Singleton クラスなど) に耐えられるため、これはまったく正常なことだと思います...どう思いますか?