24時間365日稼働させているとアプリケーションの処理が遅延する状況があり、その要因について
以下のように考えました。
以下、問題点が判明しています。
0. キューにデータを格納するが取り出さない問題がある。
0. 画面表示の更新周期でガベージコレクト(GC.Collect()の呼び出し)を実行する問題がある。
アプリケーションの処理が遅くなる理由を考えました。
- キューへデータを格納して取り出さないため、日々使用可能メモリを圧迫していく。
- 表示更新時にガベージコレクトを実行するが、蓄積した量により徐々に処理時間が長くなる。
処理時間が長くなる理由は、回収可能かの判定処理が蓄積したデータ全てに行われるため、
蓄積量に比例して時間がかかると考えています。
- 上記によりアプリケーションの処理が、徐々に遅延していく。
アプリケーションの処理が遅延する理由は、ガベージコレクト中は、メモリへのアクセスが
ブロックされ、アプリケーションの処理が待たされると考え、ガベージコレクトの時間が
長くなることで待たされる時間も長くなると考えています。
上記要因は、考えにくいでしょうか、的外れでしょうか?
お教えいただければ幸いです。
OS:Windows7 Professional
.NET Framework 2.0
開発環境:VisualStudio 2005
言語:C#