加快C#/ .NET应用程序的执行速度

时间:2011-06-06 21:41:17

标签: c# .net performance

我正在寻找提升C#/ .NET应用程序的方法。 到目前为止我发现的是

  1. 使用ngen
  2. 小心when using as operator
  3. 使用反射API时要小心。使用Assembly.LoadFrom()加载dll需要一段时间。
  4. 您还需要哪些其他工具/技巧/良好实践才能从C#/ .NET程序中获得最佳性能。

4 个答案:

答案 0 :(得分:5)

首先要小心ngen。它实际上可能最终会损害性能。有关详细信息,请参阅Jeff Richter的书“CLR via C#,Third Edition”。

当我需要对应用程序进行性能调优时,我个人会使用分析器。我更喜欢的是红门蚂蚁,但市场上有很多好的蚂蚁。然而,使用这些可能有点棘手,因为它们会产生很多噪音。

我见过的大多数问题通常都是由开发人员或整体架构而不是.Net Framework引起的。例如,Asp.Net Web应用程序需要30多次调用数据库才能加载主页。

答案 1 :(得分:1)

尽可能记住昂贵的功能。

public static class Expensive
{
    private static readonly ConcurrentDictionary<int, int> _map = 
        new ConcurrentDictionary<int, int>();

    public static int Calculate(int n)
    {
        return _map.AddOrUpdate(n, Add, (key, value) => value);
    }

    static int Add(int key)
    {
        return 0;
    }
}

答案 2 :(得分:1)

在准确了解要部署dll的CPU环境之前,不应使用ngen。并且确切地知道它们不会部署在其他CPU类型上。如果您编译为x86 native并在x64上部署,那就太糟糕了。您将失去编译器可以完成JIT的所有优化。

性能取决于您的应用程序尝试执行的操作。如果它是数据库驱动的Web应用程序与桌面音乐播放器应用程序,则指南会有很大不同。但你应该考虑避免装箱/拆箱,大量反射,使用XmlDocument加载一个非常大的Xml文档,并使用内置的CLR ThreadPool类进行多线程,记得实现IDisposable来命名一些.. < / p>

答案 3 :(得分:1)

我曾经花了几天时间重写代码来加速应用程序,事实上我发现我的CompareTo实现中存在瓶颈,被称为数千次。

  • 使用a profiler
  • 不要浪费时间优化无关紧要的事情(在您的情况下)。
  • 了解具备哪些功能。