我们有一个在.NET 4,Windows 2008 R2上运行的混合模式程序集应用程序(MFC + WinForms),它在一个线程上不断使用100%cpu。.Net 4不断浪费StrongNameSignatureVerification上的一个CPU内核
使用ProcessExplorer,我们在繁忙线程上看到以下堆栈。我们还可以看到另外10个线程只使用运行clr.dll!的Strong%SignatureVerification的0.01%CPU。
旋转线程不会阻止应用程序的其余部分运行,但会浪费CPU时间。
繁忙的线程的堆栈跟踪如下:
ntoskrnl.exe!IoAcquireRemoveLockEx+0xe7
ntoskrnl.exe!memset+0x22a
ntoskrnl.exe!KeWaitForSingleObject+0x2cb
ntoskrnl.exe!KeDetachProcess+0x120d
ntoskrnl.exe!PsReturnProcessNonPagedPoolQuota+0x3a3
ntoskrnl.exe!CcSetDirtyPinnedData+0x433
mscorlib.ni.dll+0x2b066a
mscorlib.ni.dll+0x2317ac
mscorlib.ni.dll+0x2b066a
mscorlib.ni.dll+0x2317ac
mscorlib.ni.dll+0x26ccf7
mscorlib.ni.dll+0x237fc4
mscorlib.ni.dll+0x26cc3c
clr.dll+0x21bb
clr.dll!CoUninitializeEE+0xee9b
clr.dll!CoUninitializeEE+0x11463
clr.dll!CoUninitializeEE+0x114dc
clr.dll!CoUninitializeEE+0x1154b
clr.dll!StrongNameErrorInfo+0xa638
clr.dll!StrongNameSignatureVerification+0x144fb
clr.dll!StrongNameSignatureVerification+0x1457d
clr.dll!StrongNameSignatureVerification+0x14638
clr.dll!StrongNameSignatureVerification+0x146d2
clr.dll!StrongNameErrorInfo+0x9977
clr.dll!StrongNameErrorInfo+0xa5bc
clr.dll!StrongNameErrorInfo+0xa553
clr.dll!StrongNameErrorInfo+0xa517
clr.dll!StrongNameErrorInfo+0xa151
clr.dll!StrongNameErrorInfo+0x9501
clr.dll!StrongNameErrorInfo+0xad67
clr.dll!StrongNameSignatureVerification+0x164d9
ntdll.dll!RtlCreateUserProcess+0x8c
ntdll.dll!RtlCreateProcessParameters+0x4e
唯一类似的帐户,我已经能够找到在这个问题:clr.sll!StrongNameSignatureVerification CPU consumption虽然线程似乎已经冷了。
我们不签署我们的程序集并且愿意相信他们,是否有办法彻底禁用强名称验证?
你见过吗? http://msdn.microsoft.com/en-us/library/cc713694.aspx – 2013-02-25 13:14:00
@SimonMourier - 是的,从我的理解,这禁用了“绕过”,从而导致所有程序集受到强名称签名验证,类与我所追求的相反。 – chillitom 2013-02-25 13:23:48
哦,对不起,你是对的。这是什么:http://www.ryangerard.net/post/8768827919/assembly-verification-skipping-on-win7-64-bit-and – 2013-02-25 13:34:12