【问题标题】:do datatype choices affect performance?数据类型选择会影响性能吗?
【发布时间】:2011-03-03 11:11:21
【问题描述】:

我有一个对象模型,用于填充查询结果,然后将其传递给 gridview。

类似这样的:

public class MyObjectModel 
{
   public int Variable1 {get;set;}
   public int VariableN {get;set;}
}

假设 variable1 保存计数的值,我知道计数永远不会变得非常大(即某一天即将到来的约会的数量)。现在,我将这些数据类型设为 int。假设可以肯定地说某人每天预订的预约少于 255 个。将数据类型从 int 更改为 byte 会影响性能吗?值得麻烦吗?

谢谢

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    不会,性能不会受到太大影响。

    对于每个int,您将节省 3 个字节,或者对于特定示例总共节省 6 个字节。除非您拥有数百万个这样的内存,否则内存节省的空间非常小。

    不值得麻烦。


    编辑:

    澄清一下——我的回答是专门针对示例代码的。在许多情况下,选择会产生影响,但这只是规模问题,需要进行性能测试以确保正确的结果。

    回答@Filip 的评论 - 将应用程序编译到 64 位和选择隔离数据类型是有区别的。

    【讨论】:

    • Visual Studio 仅提供 32 位版本是有原因的,因为根据 MS 的说法,将其编译为 64 位会使其速度变慢。因此,它可能会影响性能,具体取决于您的操作。
    • @Filip - 非常正确。在这种情况下,我看不出有什么不同。
    【解决方案2】:

    使用小于int (System.Int32) 的整数变量不会提供任何性能优势。这是因为 CLR 中的大多数整数操作都会在执行操作之前将变量提升为 intint 被认为是开发 CLR 的系统上的“自然”整数大小。

    考虑以下代码:

    for (byte appointmentIndex = 0; appointmentIndex < Variable1; appointmentIndex++)
        ProcessAppointment(appointmentIndex);
    

    在编译后的代码中,比较 (appointmentIndex &lt; Variable1) 和增量 (appointmentIndex++) 将(很可能)使用 32 位整数执行。即使优化器使用较小的数据类型,CPU 本身也需要额外的工作才能使用较小的数据类型。

    如果您要存储一个值数组,那么使用较小的数据类型可以帮助节省空间,这在某些场景中可能会带来性能优势。

    【讨论】:

      【解决方案3】:

      它将影响为该变量分配的内存量。在我个人看来,我认为在示例案例中不值得麻烦。

      如果有大量变量,或者您可以真正保存的数据库表,那么可以,但在这种情况下不是。

      此外,经过多年的维护编程,我可以肯定地说,假设任何事情的上限都不太安全。如果一些维护能力差的程序员因为试图节省微不足道的资源而不得不重新编写应用程序的可能性很小,那不值得付出代价。

      【讨论】:

        【解决方案4】:

        .NET 运行时优化了 Int32 的使用,尤其是计数器等。 .NET Integer vs Int16?

        【讨论】:

          【解决方案5】:

          与流行的看法相反,使您的数据类型更小不会使访问速度更快。事实上,它更慢。查看bool,它被实现为int

          这是因为在内部,您的 CPU 使用本机字大小的寄存器(现在是 32/64 位),并且您无缘无故地强制它来回转换您的数据(只有在写入结果时)在内存中,但它仍然是您可以轻松避免的惩罚)。

          摆弄整数宽度只会影响内存访问,特别是缓存。这种情况只有通过分析应用程序并特别查看页面错误计数器才能弄清楚。

          【讨论】:

            【解决方案6】:

            我同意其他答案,即性能不值得。但是,如果您要这样做,请使用short 而不是byte。我的经验法则是选择你能想象到的最高数字,乘以 10,然后以此为基础来选择你的价值。因此,如果您无法想象高于 200 的值,则使用 2000 作为基础,这意味着您需要 short

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-12-26
              • 1970-01-01
              • 2011-07-07
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多