Mar*_*arc 5 c# performance log4net windows-10
在最近的Windows 10 Update(Fall Creators Update)之后,.NET c#4.0应用程序的性能下降了很多.我认为存在各种问题,其中之一是log4net(或磁盘IO).
我们的应用程序非常复杂(各种WCF应用程序和ASPNET MVC 3.0应用程序),并且在开发中有很多log4net跟踪.在启动时加载第一页持续4或5分钟,在更新持续一分钟之前,如果我停用log4net的性能.
我已经使用两个克隆的虚拟机进行了测试,在正则表达式操作后进行记录,并且差异很大.
代码:
static void Main(string[] args)
{
Log.Info("Log4net1");
DateTime start = DateTime.Now;
for (int i = 0; i < 50; i++)
{
DoTheThing();
}
TimeSpan elapsedTime = DateTime.Now - start;
Log.DebugFormat("TOTAL Elapsed time: {0}", elapsedTime.TotalMilliseconds);
Console.ReadKey();
}
private static void DoTheThing()
{
DateTime start = DateTime.Now;
Regex.Replace(TEXT, " nec ", m =>
{
return " (word nec) ";
});
TimeSpan elapsedTime = DateTime.Now - start;
Log.DebugFormat("Elapsed time: {0}", elapsedTime.TotalMilliseconds);
}
Run Code Online (Sandbox Code Playgroud)
我已经使用log4net 1.2.1和2.0.8进行了测试:
平均beforeUpdate - > TOTAL经过时间:600ms
平均afterUpdate - > TOTAL经过时间:1000ms
对我们来说这是一个非常重要的问题,我还没有在网上找到任何信息.
- 更新 -
我在stackoverflow上发现了另一个(未答复的)线程: 在Windows 10 Fall Creators Update(1709)之后,log4net变得非常慢,调用者位置信息
我在两种环境下都运行了磁盘基准测试,读/写速率没有显着差异.我已经测试了应用程序完全禁用log4net(log4net threshold ="OFF"),现在时间非常相似,所以,正如@DalmTo评论,有很多可能性,这将归因于log4net,我会尝试在那里提出了一个问题,虽然已经存在相关的微软问题:https://connect.microsoft.com/VisualStudio/feedback/details/3143189/after-installing-windows-10-1709-update-creating-a-stacktrace-类已-成为-A-幅度越慢
你可能会遇到这个问题:
从2017年10月开始,在升级到Windows 10版本1709或.NET Framework 4.7.1之后,当您运行使用System.Diagnostics.StackFrame类的.NET Framework应用程序时,您会注意到性能显着下降.
应用程序在抛出.NET异常时通常依赖于StackFrame.如果这种情况发生率很高(每秒超过10次),应用程序可能会显着减慢(十倍)并且运行速度明显慢于以前.
.NET Framework 4.7.1添加了对检测和解析Portable PDB文件格式的支持,以显示堆栈跟踪中的文件和行号信息.作为此更改的一部分,堆栈跟踪中的每个函数都会检查其定义模块,以确定该模块是否使用Portable PDB格式.
由于内部缓存策略存在一些差异,运行时花费的时间比搜索经典Windows PDB的.NET Framework版本花费的时间要多得多.这导致格式化的堆栈跟踪比以前更慢.
安装最新的.NET 4.7.1可靠性更新(KB4054856)应解决此问题.
包括以下修复:大量使用System.Diagnostics.StackTrace或Exception.StackTrace的应用程序可能在.NET Framework 4.7.1上运行得更慢.
| 归档时间: |
|
| 查看次数: |
957 次 |
| 最近记录: |