非常に複雑な XAML を使用する WPF アプリケーションがあります。実行を一時停止しようとすると、アプリケーションがハングしているポイントを知る方法が必要です。アプリケーションはハングしていないように見えます。ポインターは次の行にあります。
System.Windows.Application myApp;
.
.
.
.
myApp.Run(); // <== this line
これは、タスク バーのレイアウトを変更したとき、または Windows エクスプローラーがクラッシュしたとき (タスク バーが非表示になったとき) に発生します。これらの変更を頻繁に繰り返すと、アプリケーションは決して回復しませんが、小さな変更を行うと、アプリケーションは数分後に回復します。この問題の原因を知る必要があります。アプリケーションの複雑な XAML には疑問がありますが、ページやコンポーネント、またはこのハングの原因を知る方法が必要です。
* 編集 *
ディスパッチャーの時間を消費する XAML を知るツールまたは方法が必要です。
* 編集 *
ハングの正確な理由がわかりました. 別のスレッドで ReportViewer のインスタンスを作成したためです. インスタンスの作成を削除したとき. 完全に機能しました. 奇妙なことに, この間違いは私のアプリケーションに長い間存在していました以前ですが、最近ハングが発生しました。つまり、アプリケーションの任意の場所に次のコードのいずれかを挿入すると、アプリケーションがハングします。
new Action(() =>
{
ReportViewer rv = new ReportViewer();
}).BeginInvoke(null, null);
また
new Action(() =>
{
ReportViewer rv = new ReportViewer();
rv.Dispose();
}).BeginInvoke(null, null);
また
new Action(() =>
{
ReportViewer rv = new ReportViewer();
rv.LocalReport.ReleaseSandboxAppDomain();
rv.Dispose();
}).BeginInvoke(null, null);
私の質問:
1- ウィンドウのレイアウトの変更 (タスク バーのサイズ変更または移動) と、どのビジュアル ツリーにも追加されていないレポート ビューアーとの関係は何ですか? これによりアプリケーションがハングするのはなぜですか??
2-ハングの場所を特定するにはどうすればよいですか?
3- アプリケーションが数分で回復する場合 (3-5) もありますが、何時間もハングしたままアプリケーションが回復しない場合もあります。なぜですか?
4- この状況でアプリケーションがハングする原因となったコンポーネントまたは構成を特定するにはどうすればよいですか?
ところで、これが解決されれば、他のユーザーにとって非常に便利です。これを検出するために非常に多くの時間を費やしましたが、ハングの原因となった ReportViewer と組み合わせた正確な理由はわかりませんでした。