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

加速C#/.NET应用程序的执行,c#,.net,performance,C#,.net,Performance,我正在寻找增强C#/.NET应用程序的方法。 到目前为止我发现的是 使用 小心 使用反射API时要小心。使用Assembly.LoadFrom()加载dll需要相当长的时间 为了使C#/.NET程序获得最佳性能,您还需要哪些工具/技巧/良好实践 首先要小心ngen。这实际上可能会影响性能。有关更多详细信息,请参阅杰夫·里克特的书《CLR通过C#,第三版》 就我个人而言,当我需要调整应用程序的性能时,我将使用分析器。我更喜欢红门蚁,但市场上有很多好的。然而,使用它们可能有点棘手,因为它们会产生大量

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

  • 使用
  • 小心
  • 使用反射API时要小心。使用
    Assembly.LoadFrom()
    加载dll需要相当长的时间

  • 为了使C#/.NET程序获得最佳性能,您还需要哪些工具/技巧/良好实践

    首先要小心ngen。这实际上可能会影响性能。有关更多详细信息,请参阅杰夫·里克特的书《CLR通过C#,第三版》

    就我个人而言,当我需要调整应用程序的性能时,我将使用分析器。我更喜欢红门蚁,但市场上有很多好的。然而,使用它们可能有点棘手,因为它们会产生大量噪音


    我所看到的大多数问题通常是由开发人员或总体架构而不是.Net框架引起的。例如,一个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;
        }
    }
    
    公共静态类
    {
    私有静态只读ConcurrentDictionary _映射=
    新的ConcurrentDictionary();
    公共静态整数计算(整数n)
    {
    return _map.AddOrUpdate(n,Add,(key,value)=>value);
    }
    静态整数添加(整数键)
    {
    返回0;
    }
    }
    
    您不应该使用
    ngen
    ,除非您确切知道DLL将部署在哪个CPU环境。并确保它们不会部署在其他CPU类型上。如果编译为x86本机并部署在x64上,则不好。您将失去编译器本可以通过JIT进行的所有优化


    性能取决于应用程序尝试执行的操作。如果它是db驱动的web应用程序,与桌面音乐播放器应用程序相比,指导原则将大不相同。但是您应该避免装箱/拆箱,避免大量的反射,使用XmlDocument加载非常大的Xml文档,并使用内置的CLR ThreadPool类来执行多线程,记住实现IDisposable来命名一些..

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

    • 使用。
    • 不要浪费时间优化无关紧要的内容(在您的情况下)
    • 找出原因。

    这是非常宽泛和颠倒的。首先让代码正常工作,然后解决具体的性能问题。同样正如里科·马里亚尼所说的,测量,测量,测量。但是,不要盲目地去做。