加速C#/.NET应用程序的执行
我正在寻找增强C#/.NET应用程序的方法。 到目前为止我发现的是加速C#/.NET应用程序的执行,c#,.net,performance,C#,.net,Performance,我正在寻找增强C#/.NET应用程序的方法。 到目前为止我发现的是 使用 小心 使用反射API时要小心。使用Assembly.LoadFrom()加载dll需要相当长的时间 为了使C#/.NET程序获得最佳性能,您还需要哪些工具/技巧/良好实践 首先要小心ngen。这实际上可能会影响性能。有关更多详细信息,请参阅杰夫·里克特的书《CLR通过C#,第三版》 就我个人而言,当我需要调整应用程序的性能时,我将使用分析器。我更喜欢红门蚁,但市场上有很多好的。然而,使用它们可能有点棘手,因为它们会产生大量
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来命名一些..我曾经花了几天时间重写代码以加快应用程序的速度,事实上,我发现我的
实现中有一个瓶颈,它被调用了数千次
- 使用。
- 不要浪费时间优化无关紧要的内容(在您的情况下)李>
- 找出原因。
这是非常宽泛和颠倒的。首先让代码正常工作,然后解决具体的性能问题。同样正如里科·马里亚尼所说的,测量,测量,测量。但是,不要盲目地去做。