我有两个问题:
1)我需要一些关于代码的专家观点,这将是性能和内存消耗明智的声音。
2)性能和内存消耗明智地遵循一段代码,为什么?
需要将可能达到最大值的计数器增加 100 并编写如下代码:
一些示例代码如下:
for(int i=0;i=100;i++) { 一些代码 } 对于(长 i=0;i=1000;i++) { 一些代码 }
如果要求相同,使用 Int16 或其他任何东西而不是 int 有多好。
我有两个问题:
1)我需要一些关于代码的专家观点,这将是性能和内存消耗明智的声音。
2)性能和内存消耗明智地遵循一段代码,为什么?
需要将可能达到最大值的计数器增加 100 并编写如下代码:
一些示例代码如下:
for(int i=0;i=100;i++) { 一些代码 } 对于(长 i=0;i=1000;i++) { 一些代码 }
如果要求相同,使用 Int16 或其他任何东西而不是 int 有多好。
需要将可能达到最大值的计数器增加 100 并编写如下代码:
给出的选项:
for(int i=0;i=100;i++)
for(long i=0;i=1000;i++)
编辑:如前所述,这些甚至都不会真正编译,因为中间表达式是赋值而不是 type 的表达式bool
。
这证明了一个非常重要的观点:在你快速运行之前让你的代码工作。您的两个循环不做同样的事情 - 一个的上限为 1000,另一个的上限为 100。如果您必须在“快速”和“正确”之间进行选择,您几乎总是想选择“正确” ”。(当然,这也有例外——但这通常是关于大量数据结果的绝对正确性,而不是代码的正确性。)
在此处更改变量类型不太可能产生任何可测量的差异。微优化通常就是这种情况。在性能方面,架构通常比方法内优化更重要——而且以后也更难改变。一般来说,您应该:
DateTime dtStart = DateTime.Now;
for(int i=0;i=10000;i++)
{
Some Code
}
response.write ((DateTime.Now - dtStart).TotalMilliseconds.ToString());
Long 也一样,你可以知道哪个更好...... ;)
当你做的事情需要一个代表迭代的数字或某物的数量时,你应该总是使用int
,除非你有很好的语义理由来使用不同的类型(即数据永远不能是负数,或者它可能大于 2^ 31)。此外,在编写 c# 代码时,担心这种纳米优化问题基本上无关紧要。
话虽如此,如果您想知道这样的事情之间的区别(递增 4 字节寄存器与递增 8 字节),您可以随时参考 Agner 先生的精彩指令表。
在 Amd64 机器上,递增与递增long
所用的时间相同int
。**
在 32 位 x86 机器上,递增int
将花费更少的时间。
** 几乎所有逻辑和数学运算都是如此,只要该值不是内存绑定和未对齐的。在 .NET 中,along
将始终对齐,因此两者始终相同。