是否有一种好的方法可以找到应用中的瓶颈

本文关键字:应用 方法 一种 是否 | 更新日期: 2023-09-27 18:16:59

我正在试图找出最好的方法来找出我的应用程序的哪些部分运行时间最长(运行成本最大)。该应用程序并不过于复杂,但我希望确保所有部分都经过适当调优,以便能够处理更大的负载。

Application:加载/分解xml文档并将内容转储到DB中。应用程序使用Linq to XML来解析XML,并使用SQL Server tvp将数据向下传递到DB。因为我使用的是tvp,所以即使有数据集合(数据不大(XML文件最多1MB)),我也要往返一次DB。

任何关于如何隔离瓶颈的建议都将非常感谢。

一如既往,非常感谢您的反馈。

是否有一种好的方法可以找到应用中的瓶颈

您可能想要查看StopWatch类。您可以像这样将它添加到代码中:

// load XML Method
var stopWatch = new Stopwatch();
stopWatch.Start();
// run XML parsing code
stopWatch.Stop();
var xmlTime = stopWatch.Elapsed;

// SQL Server dump Method
var stopWatch = new Stopwatch();
stopWatch.Start();
// dump to SQL Server
stopWatch.Stop();
var sqlTime = stopWatch.Elapsed;

这是一种低技术含量的测量方法。对于一个简单的应用程序,这可能比分析器更有效,因为您的应用程序只有两个真正的瓶颈点。也就是说,学习如何使用分析器可能是值得的。

根据Nate的回答,您可以使事情变得简单,并为此目的使用一个小助手方法。

public static Int64 MeasureTime(Action myAction)
{
    var stopWatch = new Stopwatch();
    stopWatch.Start();
    myAction();
    stopWatch.Stop();
    return stopWatch.ElapsedMilliseconds;
}
示例用法:

StringBuilder result;
Console.WriteLine("Parse-Xml: {0}", MeasureTime(() => result = MyAction("Test.xml")));

执行此操作的常见方法是使用分析工具。我已经使用RedGate ANTS来分析c#应用程序,它工作得很好,但是还有很多替代方案。