1

これはC#コンソールアプリケーションです。私はこのようなことをする関数を持っています:

static void foo()
{
       Application powerpointApp;
       Presentation presentation = null;

       powerpointApp = new Microsoft.Office.Interop.PowerPoint.ApplicationClass();
}

それがすべてです。呼び出されると、関数がヒットするまでに15秒の遅延があります。私はこのようなものを追加しました:

static void MyAssemblyLoadEventHandler(object sender, AssemblyLoadEventArgs args)
{
       Console.WriteLine(DateTime.Now.ToString() + " ASSEMBLY LOADED: " + args.LoadedAssembly.FullName);
       Console.WriteLine();
}

これは、foo関数がヒットする約10ミリ秒前に相互運用機能アセンブリがロードされたことを通知して起動します。これについて私は何ができますか?プログラムはこの関数を一度呼び出して(そして最終的には何か他のことをする)、それから終了する必要があるので、これらのアセンブリをキャッシュするか何かをする必要があります。アイデア?

4

5 に答える 5

4

証明書失効リストである可能性があります。これのタイムアウトは 15 秒です。イベントログに何かありますか? タイムアウト中にネットワーク接続が発生しているかどうかを確認できますか?

少し前に、証明書失効の遅延に関する詳細をブログに書きました。リンクをたどってください。ここではカットアンドペーストしません。

于 2008-11-13T09:58:03.743 に答える
3

私には 15 秒がタイムアウトのように聞こえます。アセンブリに署名していますか? ロード時にフレームワークが証明書失効リストをチェックしようとするが、15 秒後に失敗するという問題がありました。

HTH

ティム

于 2008-11-13T09:51:41.710 に答える
1
<runtime>

   <generatePublisherEvidence enabled="false"/>

</runtime>

詳細はこちらをご覧ください

http://msdn.microsoft.com/en-us/library/bb629393.aspx

「サービスは、起動パフォーマンスを向上させるためにこの要素を使用することをお勧めします。この要素を使用すると、タイムアウトやサービス起動のキャンセルを引き起こす可能性のある遅延を回避するのにも役立ちます。」

于 2010-03-24T04:40:20.253 に答える
0

推測ですが、相互運用アセンブリが読み込まれた後、おそらく PowerPoint が起動します。

于 2008-11-10T23:04:59.413 に答える
0

アプリケーションの開始時にメソッド foo() が呼び出されず、それが呼び出される前に実行する他のタスクがある場合は、最初に別のスレッドを開始してアセンブリをロードできます。

于 2008-11-12T22:46:31.273 に答える