10

WPF アプリケーションでホストされている場合は正常に動作する WPF ウィンドウがありますが、ネイティブ C++ アプリケーション内からロードすると、レンダリングに非常に長い時間がかかり、完了するまで UI スレッドがブロックされます。

私のウィンドウの主な問題は、システム内のコンポーネントの状態を表す 9 x 12 グリッドのアイコンを表示するために使用される一連の項目コントロールです。

項目全体のコントロールは、最初のレンダリングに最大 14 秒かかります。(これは、WPF アプリで実行するとほぼ瞬時に行われます)

各行にはテキスト ヘッダーがあり、クリックすると各ステータス アイコンのデータの要約 (最大、最小、平均、標準偏差) が表示されます。このヘッダーをクリックすると、概要が表示されるまでに最大 4 秒かかる場合がありますが、私の WPF アプリでは瞬時に実行されます。

ネイティブ アプリケーション内で WPF を適切に実行するための既知のトリックはありますか?

[編集]

次のコードを使用して、大規模な.NET Windowsフォームアプリケーションから起動しようとしました:

    public bool? ShowWpfDialog(System.Windows.Window window, Form owner)
    {
        var helper = new System.Windows.Interop.WindowInteropHelper(window)
                         {Owner = (owner == null) ? IntPtr.Zero : owner.Handle};
        return window.ShowDialog();
    }

ネイティブ アプリから実行する場合と同じパフォーマンスの問題があります。(.net アプリはネイティブ コードも実行します。)

[編集]

WindowInteropHelper を使用しない場合、コードは適切に実行されます。

    public bool? ShowWpfDialog(System.Windows.Window window, Form owner)
    {
        //var helper = new System.Windows.Interop.WindowInteropHelper(window)
        //                 {Owner = (owner == null) ? IntPtr.Zero : owner.Handle};
        return window.ShowDialog();
    }

パフォーマンスの問題を引き起こす WindowInteropHelper の動作は何ですか?

[編集]

WindowInteropHelper を使用して所有者と共にリソースをロードするときに、リソースが解決される方法に問題がある可能性はありますか?

4

3 に答える 3

0

NGENを介して .NET アセンブリのネイティブ イメージを作成して使用することができます。これにより、大幅に速度が向上しますが、あなたの場合の違いがどれほど大きいかはわかりません...少なくとも読み込み時間が短縮されるはずです

于 2013-01-22T19:56:00.280 に答える