機能について詳しく説明したくありませんが、子コントロールを追加または削除すると、アプリケーションのウィンドウのサイズが変更されます。最近実行されたストレステストでは、Windowsのタスクマネージャでアプリケーションの高いピークワーキングセットに気付きました。子コントロールは200ミリ秒ごとに追加され、削除されたので、ウィンドウはその都度大きくまたは小さくなりました。 VMware Workstation Pro仮想マシン(Windows Server 2012、Windows 10)でこれらのテストを実施しました。VMWare Workstation上でのWPFアプリケーションによるメモリ使用量の増加
2時間以内であれば、アプリケーションは常にメモリ例外を報告し、このウィンドウはフリーズするか消えます。私たちは、クラッシュ後(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分後)、私たちは、コンソールが表示された瞬間にゆっくりと上昇する傾きでテストアプリケーションのメモリ使用履歴を観察することができました。
私はこの問題の理由を理解するのに役立つ情報に感謝します。ありがとうございました。
- EDIT - 両方のどれCPU用にコンパイルされますが、そのうちの一つがは、32ビットチェックボックスを好む持っていた - 私は、VM(のWindows Server 2012)に2つのインスタンスに私のテストのアプリを起動さ
Visual Studioではチェックが外されています。そのため、32ビットモードで起動し、もう1つは64ビットモードで起動しました。 32ビット版は1時間ほどでクラッシュし、ピーク動作は150MB未満になりました。 64ビット版は稼働し続けました。私は1つのようなメモリリークを追跡する必要がある場合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
その参照に保持しているものにあなたを導くどのように多くの { VARランダムにあなたを教えてくれます=新しいランダム(); var height = random.Next(1080); this.Height = height; }プライベートボイドWindow_Loaded(オブジェクト送信者、RoutedEventArgs e)の {VARのdispatcherTimer =新しいDispatcherTimer {インターバル=新規のTimeSpan(0、0、0、0、200) }。 dispatcherTimer.Tick + =新しいEventHandler(dispatcherTimer_Tick); dispatcherTimer.Start(); } –
ウィンドウが最小化されると、GUIの更新が行われず、コードが非常に高速に実行されます。ウィンドウが再びアクティブ化され、GUIの更新が発生したとき、TPLを使用してTextBoxコントロールにたくさんのテキストを書き込みますタスクを使用して、Visual Studioを使用してVM上でプロファイリングを実行しますか? –
タイマーの例は問題ありません。これは私たちがテストした方法です(実際には、私はランダムな高さを使用しませんでしたが、2つの値は同じ意味で使用されていますが、それは問題ではありません)。私はあなたがホスト上でそれを再現するかどうかはわかりません - 私の同僚は何とかしてくれましたが、私は管理しませんでした。その他の質問に答えるために、私はタスクを使用せず、VSをVMにインストールしていませんが、今週は何らかのプロファイリングを試みます。あなたの関与に感謝します! –