.Net - 在函数中引用时,互操作程序集需要15秒才能加载

时间:2008-11-10 23:01:01

标签: c# .net com-interop

这是一个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毫秒。我该怎么办?程序需要调用此函数(并最终执行其他操作)一次然后退出,因此我需要缓存这些程序集或其他东西。想法?

5 个答案:

答案 0 :(得分:4)

它可能是证书撤销列表 - 此时的超时为15秒。 事件日志中有什么内容吗?你可以检查在超时期间是否发生任何网络连接吗?

前一段时间

I blogged some details about certificate revocation delay。按照链接,我不会在这里剪切并粘贴它。

答案 1 :(得分:3)

15秒对我来说听起来像是暂停。你在签署你的集会吗?我们遇到一个问题,框架在加载时想要检查证书撤销列表,但在15秒后失败。

HTH

答案 2 :(得分:1)

<runtime>

   <generatePublisherEvidence enabled="false"/>

</runtime>

详情请见此处

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

“我们建议服务使用该元素来提高启动性能。使用此元素还可以帮助避免可能导致超时和取消服务启动的延迟。”

答案 3 :(得分:0)

猜测,但可能是在互操作程序集加载后PowerPoint启动的时间。

答案 4 :(得分:0)

如果在应用程序启动时没有调用方法foo(),并且在调用它之前还有其他任务要做,那么可以在开始时启动一个单独的线程来加载程序集。