【问题标题】:C# performance for integer variables [closed]整数变量的 C# 性能
【发布时间】:2012-12-29 14:43:22
【问题描述】:

我已经知道建议在 for 循环中使用 int 变量只是对性能感到好奇,建议使用除 int C# 之外的其他整数类型以及何时使用?

这个问题的真正目的是我必须创建一个 T 类型的通用列表,其中 T 是一个包含字符串和整数类型字段的结构。所以我认为优化结构会对整个列表的优化产生立竿见影的影响

我怀疑我的清单会很长......

谢谢

【问题讨论】:

  • 那么整数值代表什么?你的结构肯定首先适合作为结构吗?
  • integr 所代表的内容与答案没有联系:一些整数是 elligebile 具有 ushort 类型,而另一些是 byte 类型我只是想知道如果不给它们所有相同的长度 32 位会影响性能
  • 这是在浪费您的开发时间。如果您有可衡量的性能问题,请不要优化结构并返回。
  • @Oumdaa:不,变量的含义absolutely改变了你应该使用哪种类型——因为在几乎所有情况下你都应该关注最清晰 类型来表示所涉及的数据。衡量性能,看看它是否足够好。

标签: c# performance integer generic-list


【解决方案1】:

(通常的过早优化警告适用于此答案。我假设您确实需要最高性能。)

通过使用最小的可行类型来优化类和结构的大小是一种有效的优化。在您的情况下,您不会获得任何收益,因为 string,int 和 string,byte 两个结构由于填充而具有相同的大小。

一般来说,这种技术是有效的。您可以节省内存使用量并获得参考位置、缓存使用率和减少的内存带宽。

将循环计数器变量更改为更小的类型不会获得任何好处,因为对小于 int 的整数的任何操作都会变宽为 int。

【讨论】:

  • 正如我所说,我的名单会很长。请您详细解释一下结构 string,int 和 string,byte 将如何具有相同的大小?
  • @Oumdaa 结构在 CLR 上打包。结构的数据大小四舍五入到最接近的 4 或 8 倍数(取决于您是以 32 位还是 64 位运行)。因此,如果将数据大小从 12 减少到 9,那么结构大小仍然为 12。
  • 好的,非常感谢;可能是我必须对性能不太敏感,我只是回顾一下我的需求并发现更改类型最多可以节省 24*N*bits,其中 N 是列表 N~1K 的长度,所以 ~24kbits 这没什么大不了的!
【解决方案2】:

可能我对性能方面的东西不那么敏感

我只是回顾了我的需求,发现更改类型最多可以节省 24*N*bits,其中 N 是列表的长度 N~10K 所以~240kbits 这没什么大不了的!

【讨论】:

    猜你喜欢
    • 2012-02-29
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    相关资源
    最近更新 更多