【问题标题】:List of Structs or Dataset in C#?C# 中的结构或数据集列表?
【发布时间】:2010-10-13 07:13:09
【问题描述】:

我有一些想要处理的数据。两个字符串和两个数字,我说的是 8000 行数据。

在这里使用数据集是最好的选择,还是我可以使用结构并拥有结构列表?

列表和数据集之间会不会有很大的性能差异?

【问题讨论】:

  • 您没有告诉我们足够多的信息来正确回答您的问题。你打算用这些数据做什么?过滤吗?坚持吗?把它分类?存储吗?等等。

标签: c# arrays list dataset


【解决方案1】:

DataSets 和 DataTables 通常更冗长,并且需要一些访问开销,但通常可以与您使用的任何数据绑定类型的东西互操作。

如果您有选择(即您没有被某些使用DataTables 的组件所吸引),我强烈建议您使用适当的强类型集合,例如通用ListDictionarySortedDictionary。我建议,如果您的项目有长远的发展,那么从长远来看,灵活性和透明度将使您受益。

附:两个字符串和两个数字足够大,我怀疑将其设为 struct 而不是类会带来什么好处。当然,您应该自己分析它,但这是我的直觉。我同意帖子中提到的如果这是过早优化的情况,您应该确保您了解两者之间的根本区别。

【讨论】:

  • 两个字符串和两个数字只是一个例子。我的实际数据有 35 个单位和 5 个字符串,仍然不多。
  • 虽然我的问题并不理想,但使用通用列表是我现在使用的方法。谢谢大家的建议!
【解决方案2】:

好的,我是根据有限的数据进行推断的,但是您在结构列表和数据集之间进行询问的事实对我来说意味着您对 C# 有点陌生,并且没有被介绍过这样一个事实: struct 是ValueType,因此存在于堆栈中。您可能听说过结构可以在某处为您提供“更好的性能”,并希望为您的 8000 项列表获得最佳性能。

首先,我认为您过早地进行了优化。别。在你的程序范围内做任何事情。如果您自己以编程方式(可能从 XML 或平面文件)构建这个包含 8000 个项目的列表,我建议您使用 objects 列表,因为这将是最容易为您编程。您的帖子并不意味着您在两个表格数据集之间存在关系,因此不需要 DataSet。

也就是说,如果您以某种方式从数据库接收该列表,并且您当前的数据层是 ADO.NET 2.0(因此返回 DataSets 和 DataTables),那么我会说使用它。如果您从数据库接收列表但尚未定义数据层,我建议您查看LINQ to SQLEntity Framework

我再次提醒您不要过早优化,尤其是考虑到您似乎不了解结构的工作原理。同样这是一个假设,如果我错了,我提前道歉。

【讨论】:

  • 很抱歉,当我谈到性能时,我并不是指优化。如果有理由不在数据集上使用结构的通用列表,我会更好奇。认为使用数据集的开销很大。
  • 虽然在再次阅读堆栈与堆之后,我应该问一个关于类与数据集的通用列表。
【解决方案3】:

取决于“合作”对您意味着什么。如果我在 DataGridView 或类似的其他控件中显示数据,我会选择 DataSet/DataTable 路由。使您能够对数据进行一些简单的过滤。

同样,List 与 DataSet 的性能差异取决于您在做什么。列表非常适合遍历容器和这种性质的事物。 DataSets 和DataTables 提供了诸如ReadXML() 之类的简单操作(当然,假设您已经将数据保存在XML 中),它们将获取您的元素、创建列并为您填充行。挺方便的。

除非您在相当严格的硬件上运行,或者其他线程/进程还有很多其他工作,否则 8000 个项目并不是真正的大量数据。我会根据我打算用它做什么来选择我的容器。如果我使用数据绑定,我会选择 DataSet。

【讨论】:

  • 您可以使用通用列表来提供 GridViews - 这对 DataSets/Tables 来说不是一个优势。
  • 同意您可以这样做,但根据他的需要,DataTable 解决方案可能会为列表提供更大的灵活性。 OP 不是很清楚,所以很难确定什么是最好的。我的很多数据都被拉/推到数据库中,我认为这些数据表非常方便。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多