1

我有两个问题:

1)我需要一些关于代码的专家观点,这将是性能和内存消耗明智的声音。

2)性能和内存消耗明智地遵循一段代码,为什么?

需要将可能达到最大值的计数器增加 100 并编写如下代码:

一些示例代码如下:

for(int i=0;i=100;i++)
{
     一些代码
}

对于(长 i=0;i=1000;i++)
{
     一些代码
}

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

4

3 回答 3

5

需要将可能达到最大值的计数器增加 100 并编写如下代码:

给出的选项:

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

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

编辑:如前所述,这些甚至都不会真正编译,因为中间表达式是赋值而不是 type 的表达式bool

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

在此处更改变量类型不太可能产生任何可测量的差异。微优化通常就是这种情况。在性能方面,架构通常方法内优化更重要——而且以后也更难改变。一般来说,您应该:

  • 使用最正确和最简单地表示您的数据的类型编写最简洁的代码
  • 确定合理的性能要求
  • 衡量您的干净实施
  • 如果它的性能不够好,请使用分析等来找出如何改进它
于 2012-08-03T06:18:42.403 回答
0
DateTime dtStart = DateTime.Now;


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

response.write ((DateTime.Now - dtStart).TotalMilliseconds.ToString());

Long 也一样,你可以知道哪个更好...... ;)

于 2012-08-03T06:16:53.560 回答
0

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

话虽如此,如果您想知道这样的事情之间的区别(递增 4 字节寄存器与递增 8 字节),您可以随时参考 Agner 先生的精彩指令表

在 Amd64 机器上,递增与递增long所用的时间相同int。**

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

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

于 2012-08-03T06:24:23.867 回答