0

機能について詳しく説明したくありませんが、子コントロールを追加または削除すると、アプリケーションのウィンドウのサイズが変更されます。最近実行されたストレステストでは、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アプリケーションを作成することにしました。このアプリケーションには同じ問題があることが判明しました。

同様の問題に関する情報を見つけることができなかったので、ここで質問を投稿することにしました。あなたはそのような行動をどのように説明しますか?

は私にもあることに注意しましょう:

  1. ウィンドウが最小化された場合は、問題が発生することはありません。
  2. ホスト(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 
+0

その参照に保持しているものにあなたを導くどのように多くの { 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(); } –

+0

ウィンドウが最小化されると、GUIの更新が行われず、コードが非常に高速に実行されます。ウィンドウが再びアクティブ化され、GUIの更新が発生したとき、TPLを使用してTextBoxコントロールにたくさんのテキストを書き込みますタスクを使用して、Visual Studioを使用してVM上でプロファイリングを実行しますか? –

+0

タイマーの例は問題ありません。これは私たちがテストした方法です(実際には、私はランダムな高さを使用しませんでしたが、2つの値は同じ意味で使用されていますが、それは問題ではありません)。私はあなたがホスト上でそれを再現するかどうかはわかりません - 私の同僚は何とかしてくれましたが、私は管理しませんでした。その他の質問に答えるために、私はタスクを使用せず、VSをVMにインストールしていませんが、今週は何らかのプロファイリングを試みます。あなたの関与に感謝します! –

答えて

0

:これは移動するための方法かもしれない場合、私は、次の32ビットアプリケーションのバージョンの問題の署名である...

を思ったんだけどあなたは説明している、私はいつもWinDBGになる

それは無料で非常に効果的です。それは非常に急な学習曲線を持っています。これは、オブジェクトのインスタンスがメモリ内にあると、私はこの プライベートボイドdispatcherTimer_Tick(オブジェクト送信者、EventArgsのeを)しようとしたホスト上で再現する方法を

関連する問題