我有两个问题:
1)我需要一些专家观点,以便在性能和内存消耗方面做得足够明智。
2)性能和内存消耗明智的是,好的/坏的是跟随一段代码以及为什么???
需要增加最大值为100的计数器并编写如下代码:
一些示例代码如下:
for(int i=0;i=100;i++) { Some Code } for(long i=0;i=1000;i++) { Some Code }
如果要求相同,使用Int16或其他任何东西而不是int有多好。
答案 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
将始终对齐,因此两者将始终相同。