C# .NET核心CLR有一半时间在等待ntdll.dll
我正在用dotTrace分析一个高度并行的项目,并注意到CLR花费了将近50%的时间等待C# .NET核心CLR有一半时间在等待ntdll.dll,c#,.net,performance,profiling,C#,.net,Performance,Profiling,我正在用dotTrace分析一个高度并行的项目,并注意到CLR花费了将近50%的时间等待ntdll.dll。我很难弄清楚这是什么原因造成的 我有没有办法确定是什么原因导致CLR花这么多时间调用内核的?我已经开发了一个尽可能低分配的项目,与运行时间相比,垃圾收集的使用可以忽略不计。我能想到的唯一原因是内存延迟或CPU缓存未命中,因为一些CPU密集型计算使用随机内存访问。您使用的是哪个版本的.NET Core和哪种应用程序?另外,您是否尝试启用并检查ETW以查看发生了什么?启用本机代码调试,查看是
ntdll.dll
。我很难弄清楚这是什么原因造成的
我有没有办法确定是什么原因导致CLR花这么多时间调用内核的?我已经开发了一个尽可能低分配的项目,与运行时间相比,垃圾收集的使用可以忽略不计。我能想到的唯一原因是内存延迟或CPU缓存未命中,因为一些CPU密集型计算使用随机内存访问。您使用的是哪个版本的.NET Core和哪种应用程序?另外,您是否尝试启用并检查ETW以查看发生了什么?启用
本机代码调试
,查看是否出现一些本机异常。异常处理是昂贵的。另外,检查您是否有一些线程锁定问题。