秋季创作者更新性能问题

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-幅度越慢

Rol*_*sen 5

你可能会遇到这个问题:

从2017年10月开始,在升级到Windows 10版本1709或.NET Framework 4.7.1之后,当您运行使用System.Diagnostics.StackFrame类的.NET Framework应用程序时,您会注意到性能显着下降.

应用程序在抛出.NET异常时通常依赖于StackFrame.如果这种情况发生率很高(每秒超过10次),应用程序可能会显着减慢(十倍)并且运行速度明显慢于以前.

https://support.microsoft.com/en-us/help/4057154/performance-of-system-diagnostics-stackframe-degrades-in-windows-10-17

.NET Framework 4.7.1添加了对检测和解析Portable PDB文件格式的支持,以显示堆栈跟踪中的文件和行号信息.作为此更改的一部分,堆栈跟踪中的每个函数都会检查其定义模块,以确定该模块是否使用Portable PDB格式.

由于内部缓存策略存在一些差异,运行时花费的时间比搜索经典Windows PDB的.NET Framework版本花费的时间要多得多.这导致格式化的堆栈跟踪比以前更慢.

https://github.com/Microsoft/dotnet/blob/master/releases/net471/KnownIssues/517815-BCL%20Applications%20making%20heavy%20use%20of%20System.Diagnostics.StackTrace%20might%20run%20more%20slowly% 20on%20.NET%204.7.1.md

安装最新的.NET 4.7.1可靠性更新(KB4054856)应解决此问题.

包括以下修复:大量使用System.Diagnostics.StackTrace或Exception.StackTrace的应用程序可能在.NET Framework 4.7.1上运行得更慢.

https://blogs.msdn.microsoft.com/dotnet/2018/01/09/net-framework-4-7-1-is-available-on-windows-update-wsus-and-mu-catalog/