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

本文关键字:应用程序 执行 速度 NET | 更新日期: 2023-09-27 17:58:27

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

  1. 使用ngen
  2. 用作操作员时要小心
  3. 使用反射API时要小心。用Assembly.LoadFrom()加载dll需要相当长的时间

您还需要哪些工具/技巧/良好实践才能从C#/.NET程序中获得最佳性能。

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

首先要小心使用ngen。实际上,这可能最终会影响性能。请参阅Jeff Richter的书"CLR via C#,Third Edition"了解更多详细信息。

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

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

尽可能记住昂贵的函数。

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;
    }
}

在您确切知道dll将部署在哪个CPU环境之前,不应该使用ngen。并且要确保它们不会部署在其他CPU类型上。如果编译到x86本机并部署在x64上,则情况会很糟糕。您将失去编译器本可以JIT完成的所有优化。

性能取决于你的应用程序要做什么。如果是数据库驱动的网络应用程序和桌面音乐播放器应用程序,指导方针会大不相同。但是,您应该避免装箱/取消装箱、大量反射、使用XmlDocument加载非常大的Xml文档,并使用内置的CLR ThreadPool类来执行多线程,记住实现IDisposable等等。。

我曾经花了几天时间重写代码以加快应用程序的速度,但事实上,我发现我的CompareTo实现中存在一个瓶颈,它被调用了数千次。

  • 使用探查器
  • 不要浪费时间优化无关紧要的东西(在您的情况下)
  • 了解功能