私のWPFアプリケーションでは、初めてユーザーがメニューを開くときに、Accessibility.dllの遅延読み込みによって一時停止が発生します。Accessibility.dllの遅い遅延ロード?
これは非常に迷惑なので、起動時にこのアセンブリを強制的にロードしたいと思います。私は運がないとこれを行ういくつかの方法を試してみました。たとえば、Assembly.Load()またはAppDomain.Load()を使用します。これらの呼び出しのいずれもアセンブリの読み込みになりません(つまり、AssemblyLoadedイベントは発生しません。これらのメソッドを呼び出すために正しいAssemblyNameを取得するためにassmeblyを直接参照しようとしましたが、まだ運がありません)。
正しい方法?これを実現する
多くのおかげ ダン
編集:(メニューをクリックした後)組立負荷のスタックを呼び出し
がmscorlib.dll System.AppDomain.OnAssemblyLoadEvent(System.Reflection.RuntimeAssemblyLoadedAssemly [!原産の ネイティブの移行にマネージド移行]
[]
PresentationFramework.dll System.Windows.Controls.Primitives.Popup.CreateWindow(ブール値asyncCall)
ポップアップからの呼び出しは、次のとおりです!
_secHelper.ForceMsaaToUiaBridge( _popupRoot.Value);
フレームワークアセンブリはngen.exeによって事前にjittingされています –
Accessibility.dllにはいくつかのインタフェースが含まれているため、この手法を適用できるかどうかはわかりません。アセンブリを最初に読み込んでメニューを開くときに上記の呼び出しスタックを追加しました。 –
@HansPassant:そうです、私はそれがフレームワークアセンブリであることを認識しませんでした。私はこれまでこれを使用していませんでしたが、それが正しいとすればCOMラッパーなので、COMオブジェクトのインスタンス化がボトルネックになる可能性があります。 STAモデルで使用されるはずだが、OPはGUIスレッドでインスタンス化する必要があるため、バックグラウンドのinitは役に立ちません。 – Groo