機能についてはあまり詳しく説明しませんが、子コントロールが追加または削除されると、アプリケーションのウィンドウのサイズが変更されます。最近実施したストレス テスト中に、Windows タスク マネージャーでアプリケーションのワーキング セットのピークが高いことに気付きました。子コントロールは 200 ミリ秒ごとに追加および削除されたため、ウィンドウはその都度高くなったり小さくなったりしました。これらのテストは、VMware Workstation Pro 仮想マシン (Windows Server 2012、Windows 10) で実行しました。
せいぜい数時間後、アプリケーションは常にメモリ不足の例外を報告し、ウィンドウがフリーズするか消えると述べました。クラッシュ後、ワーキング セットは正常 (100 MB 未満) でしたが、その時点でピーク時のワーキング セットは常に 1 GB を超えていました (~1.1 ~ ~1.6 GB)。
この問題がアプリケーションのバグによるものかどうかを調べるために、メイン ウィンドウの高さを 200 ミリ秒ごとに変更するタイマーのみを使用して、単一ウィンドウの WPF アプリケーションを作成することにしました。このアプリケーションにも同じ問題があることが判明しました。
同様の問題に関する情報が見つからなかったので、ここに質問を投稿することにしました。そのような行動をどのように説明しますか?
また、次のことにも注意してください。
- ウィンドウが最小化されている場合、問題は発生しませんでした。
- ホスト (VM ではない) で問題を再現するのは困難でしたが、たまたまホストでも (Windows 8 で) 観察されました。
また、仮想コンピューター (WMware ESX 5.5) でテストを実行しました。誰も見ていない場合、クラッシュははるかに速く発生します:-)。つまり、vSphere Client から VM に接続し、コンソールを開いて OS でテスト アプリを起動しました。次に、コンソールを非表示にするために、vSphere Client の別のタブに切り替えました。後で (たとえば 30 分後に) 戻ったとき、テスト アプリのメモリ使用量の履歴を観察できました。勾配はゆっくりと上昇し、コンソールが表示された瞬間に瞬時に下降しました。
この問題の理由を理解するのに役立つ情報に感謝します。ありがとうございました。
- 編集 -
VM (Windows Server 2012) 上の 2 つのインスタンスでテスト アプリを開始しました。どちらも任意の CPU 用にコンパイルされていますが、そのうちの 1 つはVisual Studio で [ 32 ビットを優先]チェック ボックスがオフになっていました。そのため、1 つは 32 ビット モードで開始し、もう 1 つは 64 ビット モードで開始しました。32 ビット バージョンは 1 時間ほどでクラッシュし、ピーク時は 150 MB 未満に設定されました。64 ビット バージョンは引き続き実行されました。このままでいいのかな…と悩んでいます。
以下は、32 ビット アプリケーション バージョンの問題の特徴です。
Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01: ResizeStressTest 32.exe
Problem Signature 02: 1.0.0.0
Problem Signature 03: 5762641e
Problem Signature 04: PresentationCore
Problem Signature 05: 4.0.30319.34209
Problem Signature 06: 5348b56b
Problem Signature 07: 283
Problem Signature 08: 13
Problem Signature 09: System.OutOfMemoryException
OS Version: 6.2.9200.2.0.0.272.7
Locale ID: 1031
Additional Information 1: 5861
Additional Information 2: 5861822e1919d7c014bbb064c64908b2
Additional Information 3: 5c1f
Additional Information 4: 5c1f554df00553b422a8baa03b19335a
Read our privacy statement online:
http://go.microsoft.com/fwlink/?linkid=190175
If the online privacy statement is not available, please read our privacy statement offline:
C:\Windows\system32\en-US\erofflps.txt