2011-03-30 92 views
3

这适用于.NET。 我正在寻找编写空间映射应用程序。一次存储器中会有几个多边形(大约30-50个多边形)。每个polgon都有LatLong点的集合。该集合的范围可以是每个多边形10到200个。但是,有很多计算将使用这些点来完成,这就是为什么(为了性能)我想使LatLong成为一个结构。不过,我很厌倦那些将会在记忆中的LatLong。任何有识之士将不胜感激。 回顾一下:我想知道如果我推荐让LatLong成为一个结构体,因为我希望性能在计算上,或者因为在内存中的latLong的数量而需要一个类。结构与类

+0

退房:http://stackoverflow.com/questions/521298/when-to-use-struct-in-c你可能会回答你自己的问题在那里。 – Marc 2011-03-30 14:21:27

+2

像往常一样,首先,你应该把它作为一个结构*如果你想要的价值语义*。做出决定后(你是否想要价值或引用语义?),衡量。然后问自己:“这个表现够好吗?” – 2011-03-30 14:23:20

+0

这是一个绝对常见问题。学习搜索或尝试缩小问题的范围,直至您希望获得其他指导的问题的具体细节。 (PS。写清楚的英语也会有很大帮助) – sehe 2011-03-30 14:41:18

回答

10

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

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

不要定义的结构,除非该类型具有以下所有 特征:

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

无论你应该这样做还是完全取决于你的应用。我会尝试两种方式,看看哪一个更快。当我有这个问题时,就是这样做的。

0

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

+0

同意,但使用实际的实际计算会更好。您需要衡量系统的性能,而不是某些可能具有或可能不具有相同性能特征的系统。决定什么是代表性计算并不总是容易的。 – 2011-03-30 14:30:24

+0

我同意,使用真实系统会带来最好的结果。另一方面,当真实系统具有> 50,000行代码时,错误的设计决策将不会像系统仅有500行代码那样容易。 – 2011-03-30 14:38:18

1

在一般情况下,如果你将有一个大的集合,其中包含在其中的数据不会改变,一旦实例化的简单对象的(你latLongs听起来像他们基本上数据容器),那么我会亲自使用一个不可变的结构体。