Windows 10 中的 System.Diagnostics.StackFrame 性能下降

如果在升级到 Windows 10 或.NET Framework 4.7.1后,您发现在运行使用System.Diagnostics.StackFrame类的(System.Diagnostics.StackFrame).NET Framework 应用程序时性能显着下降,那么您可能会对这篇文章感兴趣。我们将查看原因,然后提供已知的错误修复。

System.Diagnostics.StackFrame 性能下降

System.Diagnostics.StackFrame 性能下降

在.NET Framework 4.7(.NET Framework 4.7)或更早版本上运行具有可接受性能的应用程序在.NET Framework 4.7.1上运行时执行速度较慢。应用程序在抛出 .NET 异常时通常依赖于 StackFrame。如果这种情况以很高的速度发生(每秒超过 10 个事件),应用程序可能会显着减慢(十倍)并且运行速度明显比以前慢。

System.Diagnostics.StackFrame 性能下降的原因(Cause of the System.Diagnostics.StackFrame performance degrade)

Windows 10中的.NET Framework 4.7.1添加了对检测和解析 Portable PDB文件格式的支持,以在堆栈跟踪中显示文件和行号信息。作为此更改的一部分,堆栈跟踪中的每个函数都会检查其定义模块以确定该模块是否使用可移植PDB格式。由于(Due)内部缓存策略的一些差异,运行时搜索Portable PDB(Portable PDBs)所花费的时间比以前的 .NET Framework版本搜索经典Windows PDB(Windows PDBs)所花费的时间要多得多。

这会导致格式化堆栈跟踪的生成速度比以前慢。

此问题不会更改引发的异常数。但是,它确实显着降低了应用程序处理这些异常的能力。

已知使用IKVM库的应用程序在探测程序集时会受到此问题的影响。已知探测程序集会导致异常。

修复 System.Diagnostics.StackFrame(Fix System.Diagnostics.StackFrame)性能下降问题

若要解决此问题,Microsoft建议使用以下任一方法。

1] 为 StackFrame 使用不同的构造函数,它接受一个布尔参数(1] Use a different constructor for StackFrame that takes a Boolean argument)

这是首选的解决方案。

如果应用程序开发人员能够对其应用程序进行更改,请调用(call the) System.Diagnostics.StackTrace。#ctor( Boolean ) 构造函数通过使用 false 参数来避免捕获源信息。这避免了性能下降的代码部分。

2]回滚或升级到最新的Windows 10版本(2]  Rollback or upgrade to the latest Windows 10 version)

在此方法中,如果您遇到此问题并且当前未运行最新版本的 Windows 10 ,请(Windows 10)回滚到以前的版本/内部版本或upgrade to the latest version/build版本(Windows 10)。如果存在.NET Framework 4.7.1,请从您的计算机上卸载,然后下载(download)并安装以前版本或最新版本的.NET Framework

Hope this helps!



About the author

我是一位强烈推荐的 Windows 10 专家,我专注于帮助人们个性化他们的计算机外观并使他们的 Office 工具更加用户友好。我利用自己的技能帮助他人找到使用 Microsoft Office 的最有效方法,包括如何格式化文本和图形以进行在线打印、如何为 Outlook 创建自定义主题,甚至如何自定义桌面任务栏的外观计算机。



Related posts