这是一个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函数被击中之前我的interop程序集已加载大约10毫秒。我该怎么办?程序需要调用此函数(并最终执行其他操作)一次然后退出,因此我需要缓存这些程序集或其他东西。想法?
答案 0 :(得分:4)
它可能是证书撤销列表 - 此时的超时为15秒。 事件日志中有什么内容吗?你可以检查在超时期间是否发生任何网络连接吗?
前一段时间I blogged some details about certificate revocation delay。按照链接,我不会在这里剪切并粘贴它。
答案 1 :(得分:3)
HTH
添
答案 2 :(得分:1)
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
详情请见此处
http://msdn.microsoft.com/en-us/library/bb629393.aspx
“我们建议服务使用该元素来提高启动性能。使用此元素还可以帮助避免可能导致超时和取消服务启动的延迟。”
答案 3 :(得分:0)
猜测,但可能是在互操作程序集加载后PowerPoint启动的时间。
答案 4 :(得分:0)
如果在应用程序启动时没有调用方法foo(),并且在调用它之前还有其他任务要做,那么可以在开始时启动一个单独的线程来加载程序集。