Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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# 高CPU使用率性能.net应用程序_C#_.net_Multithreading_Profiling - Fatal编程技术网

C# 高CPU使用率性能.net应用程序

C# 高CPU使用率性能.net应用程序,c#,.net,multithreading,profiling,C#,.net,Multithreading,Profiling,我正在尝试分析我的.net应用程序,该应用程序是用C#编写的,它使用了100%的cpu。应用程序非常大,包含大量代码,所以不可能提供完整的项目代码。我尝试为使用25%CPU(1个内核)的应用程序线程获取线程堆栈,通常会得到以下结果: ntoskrnl.exe!KeSynchronizeExecution+0x2246 ntoskrnl.exe!KeWaitForMultipleObjects+0x135e ntoskrnl.exe!KeWaitForMultipleObjects+0xdd9 n

我正在尝试分析我的
.net
应用程序,该应用程序是用
C#
编写的,它使用了100%的cpu。应用程序非常大,包含大量代码,所以不可能提供完整的项目代码。我尝试为使用25%CPU(1个内核)的应用程序线程获取线程堆栈,通常会得到以下结果:

ntoskrnl.exe!KeSynchronizeExecution+0x2246
ntoskrnl.exe!KeWaitForMultipleObjects+0x135e
ntoskrnl.exe!KeWaitForMultipleObjects+0xdd9
ntoskrnl.exe!KeWaitForMutexObject+0x373
ntoskrnl.exe!KeStallWhileFrozen+0x1977
ntoskrnl.exe!_misaligned_access+0x13f9
ntoskrnl.exe!KeWaitForMultipleObjects+0x152f
ntoskrnl.exe!KeWaitForMultipleObjects+0xdd9
ntoskrnl.exe!KeWaitForMutexObject+0x373
ntoskrnl.exe!NtWaitForSingleObject+0xb2
ntoskrnl.exe!setjmpex+0x34a3
ntdll.dll!ZwWaitForSingleObject+0xa
KERNELBASE.dll!WaitForSingleObjectEx+0x98
clr.dll!GetMetaDataInternalInterface+0x25b1f
clr.dll!GetMetaDataInternalInterface+0x25ad3
clr.dll!GetMetaDataInternalInterface+0x25a92
clr.dll!GetMetaDataInternalInterface+0x39106
clr.dll!GetMetaDataInternalInterface+0x39a81
clr.dll!GetMetaDataInternalInterface+0x394ad
clr.dll!GetMetaDataInternalInterface+0x39979
clr.dll!GetMetaDataInternalInterface+0x398c1
clr.dll!GetMetaDataInternalInterface+0x3539a
clr.dll!ClrCreateManagedInstance+0x2747
KERNEL32.dll!BaseThreadInitThunk+0x22
ntdll.dll!RtlUserThreadStart+0x34
  • 有人能解释一下为什么这个调用堆栈的线程消耗1个内核吗 我的CPU
  • “KeSynchronizeExecution”是什么意思
  • 在这种情况下,如何避免高CPU使用率

    • 我只是想帮你,我不是专家

      ntoskrnl.exe!KeSynchronizeExecution例程将指定例程的执行与分配给一组或多个中断对象的中断服务例程(ISR)同步

      ntoskrnl.exe!KeWaitForMultipleObjects例程将当前线程置于可警报或不可警报的等待状态,直到多个dispatcher对象中的任何一个或全部被设置为有信号状态,或者(可选)直到等待超时

      ntoskrnl.exe!KeWaitForMutexObject例程将当前线程置于可警报或不可警报的等待状态,直到给定的互斥对象设置为有信号状态,或者(可选)直到等待超时

      我想ntoskrnl.exe!当等待多个对象例程未解析时,调用KEStallWhileFrozen例程

      ntoskrnl.exe_未对齐\u访问当cpu无法读取未对齐数据时,例行程序会发出警报。似乎未对齐的内存访问可能会在硬件中不支持它们的目标上导致巨大的性能损失。参考号:。还要检查“避免对齐错误”部分

      ntoskrnl.exe!NtWaitForSingleObject等待指定对象达到信号状态

      调用setjmp函数可保存当前指令地址以及其他CPU寄存器。对longjmp函数的后续调用将恢复指令指针和寄存器,并在setjmp调用后立即恢复执行

      ntdll.dll!ZwWaitForSingleObject例程等待指定对象达到信号状态。还可以指定可选的超时

      KERNELBASE.dll!WaitForSingleObjectEx等待,直到指定的对象处于信号状态,I/O完成例程或异步过程调用(APC)排队到线程,或者超时间隔过去


      clr.dll!GetMetaDataInternalInterface获取指向内部接口实例的指针,该实例用于在内存中读取和写入元数据。

      我以前为此使用过Jetbrains解决方案。它可以很容易地找到优化点。我的建议是使用:并找出哪些进程和方法cpu使用率高。你也可以找到记忆等


      我知道你可以试用安装它。试用安装并解决您的问题。

      此堆栈跟踪的质量非常差,当您想了解机器的灵魂时,获取操作系统的PDB非常重要。工具>选项>调试>符号>勾选“Microsoft符号服务器”并选择符号缓存目录。Fwiw,此跟踪没有显示任何性能问题的合理提示,WaitForSingleObjectEx()是一个阻止线程的同步函数。到目前为止,最好的方法是使用探查器,以便查看昂贵的代码。