C# NET中ThreadStart_上下文中的奇怪延迟导致性能问题
我编写了一个相对简单的控制台实用程序,用于访问ClosedXML库,以生成Excel电子表格。没什么好激动的,它应该跑得很快。但是,当我启动它时,它会在控制台屏幕上停留约8秒钟,然后再显示任何进度 起初,我认为这是ClosedXML库,需要一些时间来初始化。我启动了dotTrace并逐行进行性能分析,得到了一些奇怪的结果:C# NET中ThreadStart_上下文中的奇怪延迟导致性能问题,c#,.net,performance,dottrace,C#,.net,Performance,Dottrace,我编写了一个相对简单的控制台实用程序,用于访问ClosedXML库,以生成Excel电子表格。没什么好激动的,它应该跑得很快。但是,当我启动它时,它会在控制台屏幕上停留约8秒钟,然后再显示任何进度 起初,我认为这是ClosedXML库,需要一些时间来初始化。我启动了dotTrace并逐行进行性能分析,得到了一些奇怪的结果: 主螺纹[14352MS] 干管[99.29%-14251ms] 生成[88.88%-12756ms] 11个列出的通话总计为23.44%/4360毫秒 获取_实例[
- 主螺纹[14352MS]
- 干管[99.29%-14251ms]
- 生成[88.88%-12756ms]
- 11个列出的通话总计为23.44%/4360毫秒
- 获取_实例[6.78%-974ms]
- Console.ReadLine[2.75%-394ms]
- 解析策略[0.82%-118ms]
- 11个隐藏函数[0.01%-1ms]
- 生成[88.88%-12756ms]
- 解决策略[0.20%-29毫秒]
- 7个列出的通话总计为0.51%/72ms
- 干管[99.29%-14251ms]
- 线程“.NET SystemEvents”[3074ms]
- 螺纹起点[100%-3074ms]
- 运行[99.6%-3072ms]
- ThreadStart_上下文[99.93%-3072ms]
- 运行[99.6%-3072ms]
- 螺纹起点[100%-3074ms]
ThreadStart\u上下文
,我们会看到以下内容:
- System.Threading.ThreadHelper.ThreadStart_上下文(对象)[99.93%-3072ms]
- Microsoft.Win32.SystemEvents.WindowThreadProc[99.90%-3071ms]
- Microsoft.Win32.UnsafentiveMethods.MsgWaitForMultipleObjectsEx[87.26%-2682ms]
- Microsoft.Win32.SystemEvents.WindowThreadProc[99.90%-3071ms]
MsgWaitForMultipleObjectsEx
API总共被调用了26次。这意味着每次等待大约100毫秒
Generate
方法是我编写的,它与ClosedXML库有很多联系。操作的一部分涉及写入磁盘,但这是在控制台输出出现后的最后完成的。延迟发生在任何工作完成之前
我的关注有两方面:
Generate
调用下的结果存在8396ms的时间差异MsgWaitForMultipleObjectsEx
,总共需要3秒钟?我知道这可能是由于线程同步,但应用程序中只有一个线程