Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在执行托管应用程序时,.NET执行的最耗时的检查是什么?_C#_Security_Windows Services_Delayed Execution - Fatal编程技术网

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

C# 在执行托管应用程序时,.NET执行的最耗时的检查是什么?,c#,security,windows-services,delayed-execution,C#,Security,Windows Services,Delayed Execution,我开发了一个基于.NET的Windows服务,它使用部分托管(C#)和非托管代码(C/C++库) 在某些域环境中(例如,域abc.com内的Win 2k3 32位服务器),有时启动服务需要30秒以上(尤其是在操作系统重新启动时),因此无法启动服务。我怀疑这与企业级安全有关,但我不确定 我尝试了以下方法但没有成功: -延迟加载引用,方法是将using指令尽可能远离servicebase实现(特别是xml名称空间-知道会导致加载延迟) -延迟加载和配置log4net -使用ngen预编译代码 -延

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

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

我尝试了以下方法但没有成功: -延迟加载引用,方法是将using指令尽可能远离servicebase实现(特别是xml名称空间-知道会导致加载延迟) -延迟加载和配置log4net -使用ngen预编译代码 -延迟工作线程的启动 -添加/删除内部设置的清单+礼仪 -对二进制文件进行签名/取消签名 -尽可能晚地使用配置设置(有很多设置,所有的作用域级别都设置为应用程序) -将所有依赖项添加到GAC

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

通过完全删除log4net依赖项,它工作了,但这不是一个选项


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

您通常会使用SysInternals的进程监视器来诊断此问题。这是一项服务,这一事实使事情变得复杂。检查此项以了解类似的故障排除会话


它像CRL(认证撤销列表)问题一样嘎嘎作响。顺便说一句,禁用它:控制面板、Internet选项、高级选项卡、安全性,取消选中“检查发布者的证书撤销”。

我们发现,使用具有名称解析(甚至到12.0.0.1)的log4net UDP追加器会导致启动速度大幅降低

你能从主线程移动所有代码吗?你的log4net日志的目的地是什么?可能存在对其他服务的依赖性(例如SQL Server)?如果是这样的话,您当然可以限制您的服务在其他服务启动之前不启动。我的实现方式使其作为一个简单的控制台应用程序工作,并使用WinDbg。在查看了WEBBG输出之后,我注意到一个依赖关系——一个C++库在应用程序启动后加载,配置和XML命名空间确实被加载,加载下一个(文化)需要59秒。ModLoad:MyDependencyDll.dll。C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Xml\5913d3f81e77194ec833991b1047a532\System.Xml.ni.dll(d18.afc):CLR异常-代码e0434f4d(首次机会)。C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\culture.dlla在查看procxp之后,我发现一个感兴趣的线程使用WinHTTP-QueryDNS,另一个线程正在等待第一个线程。注意:我的所有二进制文件都使用有效的VeriSign证书进行数字签名。在我从网络连接中删除DNS条目后,该服务就像一个符咒一样工作(如果二进制文件没有签名,则相同)。我假设它尝试检查证书是否有效,甚至尝试从证书解析名称,但它无法(没有internet连接)。我怎么能阻止它这么做?@ltorje-yes,现在它真的在喊CRL。我更新了我的答案以显示如何关闭它。我忘了提到我已经从中执行了步骤,但没有任何成功-禁用CRL我甚至尝试将证书添加到受信任的发布者。注意:用于对代码进行签名的证书基于VeriSign Class 3代码签名2009-2 CA,在主机中将crl.microsoft.com设置为127.0.0.1也不起作用