在C#-ASP.NET中有哪些性能[Dos / Don'ts]

时间:2009-08-31 23:22:50

标签: c# asp.net-mvc performance

我正在完成我的一个项目,并查看整个项目,寻找错误,错误和性能错误。我正在使用MVC。我找到了一个不要,那就是:

永远不要将RenderPartial放在循环中。它会大大减慢整个服务器的速度。

11 个答案:

答案 0 :(得分:15)

从不将WebControl存储到会话。

因为它有对Page对象的引用,所以它最终将每个控件存储到会话中。

答案 1 :(得分:12)

不要过早优化。 :)如果网站不具备性能,请对代码进行概要分析,以确定将时间花在哪里。

答案 2 :(得分:5)

您是否通过FxCop运行程序?它有一套性能规则。

答案 3 :(得分:3)

请勿在调试配置中分析或以其他方式判断性能。调试配置并不是很快,您可能会得出错误的性能结论(比如部分视图/用户控件很慢;在调试配置中也是如此,但在发布配置中却不是这样)。在分析测量性能时,应使用发布配置,以便了解真正的问题所在。

答案 4 :(得分:2)

不要乱用显式垃圾收集。

答案 5 :(得分:1)

大多数性能问题都是由于磁盘访问或跨网络调用造成的。

因此,请注意访问文件系统或数据库的方式和频率。您是否需要通过网络拨打这么多电话,或者您是否可以通过一次通话完成。

一个很好的例子:

  • 值存储在会话
  • 会话配置为使用SQL服务器
  • 值仅每十个请求使用一次
  • 对于每个请求,将从数据库中读取值,然后将其写入数据库

在这种情况下,更好的解决方案可能是编写自定义代码来存储和读取值。

答案 6 :(得分:1)

缓存可以帮助您提高性能但是只有在有意义的地方才应该小心使用

答案 7 :(得分:1)

答案 8 :(得分:1)

请使用静态方法 - 但仅限于经常使用该方法。

除非你确实希望变量的值在所有实例中都相同,否则不要将变量标记为静态(另一个开发人员这样做了,我很乐意调试为什么我们只有在多个时才会出现奇怪的行为用户点击该网站)。这不是出于性能原因,而是好建议。

答案 9 :(得分:0)

在C#中,始终使用new创建对象。从某种角度来看,这可能是一个缺点。例如,如果在循环内创建一个对象(意味着为循环中的每次迭代创建一个新对象),则可以减慢程序的速度。

for (int i = 0; i < 1000; ++i)
{
   Object o = new Object();
   //...
}

而是在循环外创建一个实例。 对象o = new Object();

Object o = new Object();
for (int i = 0; i < 1000; ++i)
{
   //...
}

如果你真的需要......只在循环中创建一个对象。

也许做一些C ++会帮助你理解背后的机制,并知道优化代码的时间和地点。虽然C ++是一种不同的语言,但是一旦你理解了内存管理的基础(新的,删除,指针,动态数组/静态数组等),就可以将很多东西应用到其他语言中。

答案 10 :(得分:-1)

必要时仅使用try / catch块。它们会降低您的应用程序速度。

编辑清晰度: “必要”是指捕捉真正的错误。

如果您可以编写一些代码并主动确保不会抛出错误,那么它会比抛出异常更有效,然后处理它。

不要使用异常来控制程序流。我不知道是谁先说的,但我记得“异常应该是特殊的!”。它们应该用于发生不可预见问题的情况,在代码执行之前无法测试的事情并抛出它们。

我经常看到的最糟糕的例子就是这些......

int i = 0;
try
{
    i = int.Parse(txt);
} catch {Exception x) {
    // Do nothing, i = 0
}