gpt4 book ai didi

c# - Console.WriteLine 加速我的代码?

转载 作者:太空狗 更新时间:2023-10-29 21:53:17 25 4
gpt4 key购买 nike

我一直在研究加速我的应用程序,因为它对性能至关重要......也就是说,我可以从中得到更好的每一毫秒。为此,我有一个调用其他一些方法的方法,并且这些其他方法中的每一个都用 Stopwatch 计时器和 Console.WriteLine 调用包装。即:

private void SomeMainMethod()
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
SomeMethod();
sw.Stop();
Console.WriteLine("Time for SomeMethod = {0}ms", sw.ElapsedMilliseconds);

sw.Reset();
sw.Start();
SomeOtherMethod();
sw.Stop();
Console.WriteLine("Time for SomeOtherMethod= {0}ms", sw.ElapsedMilliseconds);

//...
}

问题是,每当我注释掉 StopwatchConsole.WriteLine 行时,代码运行速度都会慢 20 毫秒(而不是 50 毫秒),这对我的需要来说已经足够了。

谁知道这是为什么?

编辑:SomeMainMethod 方法和类中的其他方法也包含在 StopwatchConsole.WriteLine 调用中,与上面类似。

SomeMainMethod 及其调用的方法是一个类的一部分,该类是从控制台测试台调用的类库的一部分,所有这些都是单线程的。

有关详细信息:该应用程序在启用优化的 x86 .NET 4.6.1 Release模式下运行。我也在 visual studio 2013 中运行它,而不是在它之外。

最佳答案

看了很相似question没有答案我可能已经找到了问题所在。在评论部分,用户 (ForguesR) 发表了以下评论:

It is really a big guess : maybe because you are writing to IO your thread gets more processor time because WriteLine is synchronized and thus blocking other threads.

所以我想检查是否确实如此,所以我将 SomeMainMethod 更改为如下所示:

注意:通常不建议玩弄线程优先级,这只是测试理论的一种变通方法。我强烈建议不要在生产代码中这样做,除非你 100% 确定你知道自己在做什么。那么大概还是远离吧。

private void SomeMainMethod()
{
System.Threading.ThreadPriority tp = System.Threading.ThreadPriority.Normal;
try
{
tp = System.Threading.Thread.CurrentThread.Priority;

System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Highest;

System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
SomeMethod();
sw.Stop();
Console.WriteLine("Time for SomeMethod = {0}ms", sw.ElapsedMilliseconds);

sw.Reset();
sw.Start();
SomeOtherMethod();
sw.Stop();
Console.WriteLine("Time for SomeOtherMethod= {0}ms", sw.ElapsedMilliseconds);

//...
}
finally
{
System.Threading.Thread.CurrentThread.Priority = tp;
}
}

进行此更改后,当 ConsoleStopwatch 行被注释掉时,我的代码现在运行速度始终如一(~10 毫秒)。因此,我相信他的评论可能是正确的,至少在我的情况下是这样。

关于c# - Console.WriteLine 加速我的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37119554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com