C# 点跟踪和性能分析?
我最近重新编写了我的文件格式编写库。我意识到我的代码凌乱不堪,使一切变得过于复杂,而且通常很难维护 因此,我的新图书馆更加有序和干净。我意识到我在旧库中完成任务的许多方法比它需要的复杂得多,所以我希望我的新代码会快得多 嗯,不完全是这样。首先,我在.Net框架中使用Stopwatch类测试了性能。我的旧库速度一直很快,这让我感到震惊,因为有太多的改进和优化 然后,我使用dotTrace性能分析器测试了这两种性能。正如所料,我的新库速度更快——大约快了2倍!我的旧库测得62毫秒,我的新库测得28毫秒 所以我不确定到底发生了什么。在Visual Studio中,我的新库速度要慢得多-事实上,它非常不一致,时间范围从00::00::00.042到00::00::00.351 有人知道为什么会这样吗?dotTrace说它快2倍,秒表说它慢2-4倍 谢谢大家的帮助 亚历克斯 编辑: 这两个库的代码是相同的,都只是引用了新库和旧库。这是在控制台应用程序上测试的:C# 点跟踪和性能分析?,c#,performance,dottrace,C#,Performance,Dottrace,我最近重新编写了我的文件格式编写库。我意识到我的代码凌乱不堪,使一切变得过于复杂,而且通常很难维护 因此,我的新图书馆更加有序和干净。我意识到我在旧库中完成任务的许多方法比它需要的复杂得多,所以我希望我的新代码会快得多 嗯,不完全是这样。首先,我在.Net框架中使用Stopwatch类测试了性能。我的旧库速度一直很快,这让我感到震惊,因为有太多的改进和优化 然后,我使用dotTrace性能分析器测试了这两种性能。正如所料,我的新库速度更快——大约快了2倍!我的旧库测得62毫秒,我的新库测得28毫
class Program {
static void Main(string[] args) {
Stopwatch sw = new Stopwatch();
sw.Start();
Textstring txt = new Textstring("TestText");
txt.Text = "This is a test textstring.";
RdwFile f = new RdwFile("Test");
f.Add(txt);
f.Save();
sw.Stop();
Console.WriteLine(sw.Elapsed.ToString());
Console.ReadKey();
}
};
我们需要看看如何使用秒表。例如,您是否先运行它以便正确地进行JIT,然后再运行一次?我不知道dotTrace是否度量JIT时间。我想不会。这么短的测试不可能取得好的结果。编写一个测试,多次练习代码并运行几秒钟并进行比较。对于Stopwatch方法和dotTrace探查器,我分别运行了20次测试。旧库测量到秒表的平均值为00::00::00.034,点跟踪配置文件类型:采样,测量:线程的平均值为63。我的新库测得的平均值为00::00::00.08,但秒表的测量范围确实在00::00::00.04到00::00::00.3之间。它在dotTrace中测量到的平均时间为30毫秒。@vcsjones根据dotTrace,新库的运行速度仍然是旧库的2倍,它应该仍然比旧库快,而不是慢。您还可以尝试其他探查器与dotTrace进行比较,以查看它们是否一致。VisualStudio分析器、ANTS性能分析器、YourKit以及其他一些工具。尽管如此,请确保模拟分析选项类型的计时,即行级别、采样。我假设您没有在VS中进行调试,并且应该为此查看发布/优化的代码。