StrongNameSignatureVerification

StrongNameSignatureVerification

我们有一个运行在.Net 4,Windows 2008 R2上的混合模式汇编应用程序(MFC + WinForms),该应用程序在一个线程上始终使用100%cpu。

使用ProcessExplorer,我们在繁忙线程上看到以下堆栈。我们还可以看到运行clr.dll!StrongNameSignatureVerification的仅使用0.01%CPU的另外10个线程。

旋转线程不会阻止应用程序的其余部分运行,但会浪费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,尽管线程似乎变冷了。

我们不签署程序集并愿意信任它们,有没有办法完全禁用强名称验证?

最佳答案

clr.dll!StrongNameSignatureVerification + 0x164d9


这并没有按照您的想法做。标识符右边的数字很重要,它给出了StrongNameSignatureVerification函数地址的已知位置之后的字节数。那是91353字节,这很多。您唯一可以看出的是它没有执行StrongNameSignatureVerification,该函数的时间不那么长。同样,堆栈跟踪中的其余标识符也不可靠。

问题是调试器没有这些DLL的PDB文件。它只能发现导出函数的地址,而对两者之间的所有函数都不了解。如果偏移量小于大约0x100字节,则您只能信任显示的名称。给予或接受。

您将需要获取这些PDB文件,以了解实际情况。这需要启用Microsoft Symbol Server。开始调试时,调试器将从该服务器下载所需的PDB文件。现在,您将获得更可靠的符号,从而使您可以更好地了解实际执行的代码。

在MSDN页面is here上,启用符号服务器很容易。

关于.net - .Net 4不断在StrongNameSignatureVerification上浪费一个CPU内核,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14954387/

10-11 02:00