【问题标题】:C# Code Optimization, Profiling , Application Optimization [closed]C# 代码优化、分析、应用程序优化 [关闭]
【发布时间】:2011-01-24 09:06:52
【问题描述】:

我正在为一个已经开发了一年多的项目做出贡献,最近我投入其中。

应用程序存在性能问题。

我知道一些分析工具和优化方法,例如找出瓶颈并优化它们。我对算法、迭代的运行时间等感到满意。

我们使用的是 C#,一个面向对象的 dbms,应用程序有很多写入和更新,就缓存而言;速度缓存。应用程序将部署在大约 100 台专用大型机器上,背后是一个昂贵的负载均衡器,每秒可以处理 40 万个请求,并复制一个具有 64 GB 内存的数据库服务器。这是他们的扩展策略。

【问题讨论】:

  • 里面有问题吗? :)
  • 你能提出一个更具体的问题吗?您在寻求分析器建议吗?
  • 你会在哪里寻找,以及如何开始让这个应用运行得更快?
  • 请想一个具体的问题,然后提出来。

标签: c# .net database optimization caching


【解决方案1】:

所以基本上问题是如何定位瓶颈。分析是一种方法,如果使用得当,它通常可以正常工作。关注最高时间包容栈找出问题所在,关注时间独占定位问题函数。另请查看执行次数,您经常会在那些以方式过于频繁地执行的小函数中发现惊喜。

另一种方法是性能计数器,这是我最喜欢的方法,因为它的侵入性远低于分析,并且可以在生产部署中一次又一次地使用和重复使用。我在我的代码中慷慨地添加了计数器(请参阅Using XSLT to generate Performance Counters code 以避免输入大量重复代码)并通过调用 IncrementXXX 来检测代码。增加性能计数器非常便宜,可以将代码留在发布生产代码中,这就是我更喜欢这种方法的原因。例如,假设我有一段代码进行数据库调用,然后是 Web 服务请求,然后是另一个数据库调用。总体来说很慢,但是在哪里?我可以像这样检测代码:

void MyFunction()
{
  CountersManager.IncrementMyFunction(1);

  CountersManager.IncrementFirstDBCall(1);
  dataAccess.FirstCall();
  CountersManager.IncrementFirstDBCall(-1);

  CountersManager.IncrementWebCall(1);
  webRequest.MakeCall();
  CountersManager.IncrementWebCall(-1);

  someCode.. moreCode;

  CountersManager.IncrementSecondDBCall(1);
  dataAccess.SecondCall();
  CountersManager.IncrementSecondDBCall(-1);

  CountersManager.IncrementMyFunction(-1);
}

这是最简单的工具,添加起来很简单,虽然它提供的信息很少,但它可以让我们深入了解发生了什么。假设我收集了性能计数器,我发现大多数样本 MyFunction 计数器是 500,FirstDBCall 计数器是 50,WebService 计数器是 300,SecondDB 调用是 50。这告诉我,平均而言,从 MyFunction 中的 500 个调用, 300 在网络通话期间被捕获,因此这是花费最多时间的地方。但我可以更进一步,添加测量发生时间的计数器(增加一个 AverageTimer32 类型的计数器 一个 AverageBase ),并且分析将为我提供操作的平均持续时间。以此类推。

最后但同样重要的是,您可以查看您使用的产品中的所有现有计数器。缺点是要了解在哪里查看以及如何解释您看到的数字,需要了解所述计数器,或访问良好的故障排除技巧。例如,SQL Server 之类的产品有很多,但您使用的堆栈中的其他产品可能更难找到关于该主题的良好文档。

【讨论】:

    【解决方案2】:

    从性能分析器开始。我目前最喜欢的是红门蚂蚁。我也使用过 JetBrains dotTrace,但我更喜欢 ANTS。

    在您从性能分析器获得实际性能数据之前,您只是在猜测应用需要调整和更改的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 2011-11-02
      • 2011-11-03
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多