【问题标题】:struct vs class结构与类
【发布时间】:2011-07-26 03:25:14
【问题描述】:

这适用于 .NET。 我正在寻找编写空间映射应用程序。内存中一次将有几个多边形(大约 30 - 50 个多边形)。每个 polgon 都有一组 LatLong 点。每个多边形的集合范围可以从 10 到 200。但是,有很多计算将使用这些点来完成,这就是为什么(为了性能)我想让 LatLong 成为一个结构。但是,我对将在内存中的大量 LatLong 感到厌倦。对此的任何见解将不胜感激。 回顾一下:我想知道我是否应该将 LatLong 设为一个结构,因为我想要计算性能,或者一个类,因为内存中的 latLong 的数量。

【问题讨论】:

  • 查看:stackoverflow.com/questions/521298/when-to-use-struct-in-c 你可以在那里回答你自己的问题。
  • 像往常一样,首先你应该把它变成一个结构如果你想要值语义。在做出决定之后(你想要价值还是引用语义?),测量。然后问问自己:“这样的表现够好吗?”
  • 这是一个绝对的常见问题解答。学习搜索或尝试将问题缩小到您需要额外指导的问题的具体细节。 (PS。写清楚的英语也会有很大帮助)

标签: .net performance


【解决方案1】:

这个问题的答案将取决于您的资源优先级、类/结构中的内容以及您如何使用它。我建议你弄清楚你的内存/性能资源是什么样的,然后对这两种实现进行大量测试,看看它们如何适应这些资源参数。如果可能,请尝试测试您期望执行的实际操作。

MSDN also offers some good guidance on when and when not to use structs.来自文章:

除非类型具有以下所有条件,否则不要定义结构 特点:

  • 它在逻辑上表示单个值,类似于原始类型 (整数、双精度等)。
  • 它的实例大小小于 16 字节。
  • 它是不可变的。
  • 不必经常装箱。

【讨论】:

    【解决方案2】:

    您是否应该执行其中一项完全取决于您的应用程序。我会尝试两种方法,看看哪一种更快。当我有这个问题时,我就是这样做的。

    【讨论】:

      【解决方案3】:

      一般来说,如果您要拥有大量简单对象,其中包含的数据一旦实例化就不会改变(您的 latLong 听起来它们基本上是数据容器),那么我个人会使用不可变的结构。

      【讨论】:

        【解决方案4】:

        用一个有代表性的计算做两个测试实现,一个用一个结构,一个用一个类,然后测量,我重复测量(!!!)性能。根据我的经验,在这种情况下,对预期性能的任何偏见都可能是完全错误的。

        【讨论】:

        • 同意,但是使用实际的真实计算会好很多。您需要测量系统的性能,而不是测量可能具有或不具有相同性能特征的某些系统的性能。决定什么是有代表性的计算并不总是那么容易。
        • 我同意,使用真实系统会带来最好的结果。另一方面,当实际系统的代码行数超过 50.000 行时,错误的设计决策不会像系统只有 500 行代码时那样容易解决。
        猜你喜欢
        • 2014-11-10
        • 2012-06-16
        • 2011-05-13
        • 2011-02-14
        • 2010-11-02
        • 2019-01-21
        • 2011-06-15
        相关资源
        最近更新 更多