加快了C#/.NET应用程序的执行速度
本文关键字:应用程序 执行 速度 NET | 更新日期: 2023-09-27 17:58:27
我正在寻找提升C#/.NET应用程序的方法。到目前为止我发现的是
- 使用ngen
- 用作操作员时要小心
- 使用反射API时要小心。用
Assembly.LoadFrom()
加载dll需要相当长的时间
您还需要哪些工具/技巧/良好实践才能从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
实现中存在一个瓶颈,它被调用了数千次。
- 使用探查器
- 不要浪费时间优化无关紧要的东西(在您的情况下)
- 了解功能