.NET在执行托管应用程序时执行的最耗时的检查是什么?

时间:2010-01-28 06:29:19

标签: c# security windows-services delayed-execution

我开发了一个基于.NET的Windows服务,它使用部分托管(C#)和非托管代码(C / C ++库)。

在某些域环境中(例如域内abc.com中的Win 2k3 32位服务器),有时服务启动时间超过30秒(特别是在重新启动操作系统时),因此无法启动服务。我怀疑它与企业级安全性有关,但我不确定。

http://msdn.microsoft.com/en-us/library/aa720255%28VS.71%29.aspx

我尝试了以下但没有成功: - 通过尽可能从servicebase实现移动using指令来延迟加载引用(尤其是xml命名空间 - 知道导致加载延迟) - 延迟加载和配置log4net - 使用ngen预编译代码 - 延迟工作线程的开始 - 添加/删除里面设置的清单+内容 - 签署/取消签名二进制文件 - 使用配置设置(有很多设置,并且所有设置的范围级别都设置为应用程序)尽可能晚 - 将所有依赖项添加到GAC

我还没有尝试为实现Main方法的类添加安全性需求。 我没有尝试实现自己的配置加载器,因为在检查自动生成的代码之后,我注意到设置类是单一的,它在调用时得到它的实例。

通过完全删除它所使用的log4net依赖关系,但这不是一个选项。

当网卡被禁用时,服务立即启动。

2 个答案:

答案 0 :(得分:1)

您通常使用SysInternals的Process Monitor来诊断此问题。这是一项服务这一事实使问题复杂化。请查看此blog post以获取类似的问题排查会话。

它像CRL(证书撤销清单)问题一样嘎嘎作响。要禁用它:控制面板,Internet选项,高级选项卡,安全性,取消选中“检查发布者的证书吊销”。

答案 1 :(得分:0)

我们发现使用名称解析(甚至12.0.0.1)的log4net UDP appender导致启动速度大幅下降。