C#中的性能和内存消耗

时间:2012-08-03 06:12:20

标签: c# asp.net .net memory-management

我有两个问题:

1)我需要一些专家观点,以便在性能和内存消耗方面做得足够明智。

2)性能和内存消耗明智的是,好的/坏的是跟随一段代码以及为什么???

需要增加最大值为100的计数器并编写如下代码:

一些示例代码如下:


for(int i=0;i=100;i++)
{
     Some Code
}

for(long i=0;i=1000;i++)
{
     Some Code
}

如果要求相同,使用Int16或其他任何东西而不是int有多好。

3 个答案:

答案 0 :(得分:5)

  

需要增加最大值为100的计数器并编写如下代码:

给出的选项:

for(int i=0;i=100;i++)

for(long i=0;i=1000;i++)

编辑:如上所述,由于中间表达式是赋值而不是bool类型的表达式,因此这些都不会实际编译。

这表明了一个非常重要的观点:让您的代码在快速启动之前正常工作。你的两个循环不做同样的事情 - 一个上限为1000,另一个上限为100.如果你必须在“快速”和“正确”之间做出选择,你几乎总是想选择“正确”。 (当然也有例外 - 但这通常是在大量数据的结果绝对正确性方面,而不是代码正确性。)

在这里改变变量类型不太可能产生任何可衡量的差异。微优化通常就是这种情况。在性能方面,架构通常比方法优化更重要 - 而且以后更改也要困难得多。一般来说,你应该:

  • 使用最准确,最简单地表示数据的类型
  • ,尽可能编写最干净的代码
  • 确定合理的性能要求
  • 衡量您的清洁实施
  • 如果效果不佳,请使用性能分析等来确定如何改进

答案 1 :(得分:0)

DateTime dtStart = DateTime.Now;


for(int i=0;i=10000;i++)
{
     Some Code
}

response.write ((DateTime.Now - dtStart).TotalMilliseconds.ToString());
对于Long也是如此,你可以知道哪一个更好......;)

答案 2 :(得分:0)

当你做的事情需要代表迭代的数字或某事物的数量时,你应该总是使用int,除非你有一个很好的语义理由来使用不同的类型(即数据永远不会是负数,或者它可能大于2 ^ 31)。另外,在编写c#代码时,担心这种纳米优化问题基本上无关紧要。

话虽如此,如果你想知道这样的事情之间的差异(增加一个4字节的寄存器而不是增加8个字节),你可以随时考虑一下Agner先生的精彩instruction tables

在Amd64计算机上,递增long所需的时间与递增int的时间相同。**

在32位x86计算机上,递增int将花费更少的时间。

**几乎所有逻辑和数学运算都是如此,只要该值不是内存绑定和未对齐。在.NET中,long将始终对齐,因此两者将始终相同。