任何人都可以向我提供任何有关资料的指示,详细说明所使用的结构和算法“引擎盖下”。 .NET DataSet 类?

我目前正在使用一种语言,该语言没有像DataSet类那样的通用内存数据结构的实现。我可能最终必须自己构建一个(但不是那么广泛!),但我希望能够更好地了解在开始黑客攻击之前现有系统是如何组合在一起的。 (谢谢 Douglas Hofstadter

我正在阅读单声道实现,但任何其他链接,文章或想法都将受到赞赏。

有帮助吗?

解决方案

启动Reflector并直接进入源......

其他提示

您可以合法地从Microsoft下载DataSet的原始源代码,它将为您提供访问所有内容,包括原始评论。但是,如果您要实施类似的系统/产品,则应仔细研究许可以确保你不可能通过查看源代码来破坏它。

反射器可在 http://www.red-gate.com上找到。 /products/reflector/index.htm ,将允许您准确了解DataSet的实现方式。

您还需要查看DataAdapter,尤其是DbDataAdapter.Fill,DataTable,尤其是DataTable.Load,以及DataRow和DbDataReader。您可能希望查看一些特定的实现,如SqlDataAdapter,SqlCommand等。

请注意,DataSet证明了一切看起来像钉子的古老格言。它在.NET中被过度使用。特别是,不要使用它在Web服务及其客户端之间传输数据 - 它不能很好地互操作。

ADO.Net DataSet的关键数据结构是红黑树

  

这很复杂,但最糟糕的情况很好   运营时间和运作时间   在实践中有效:它可以搜索,   在O(log n)时间插入和删除,   其中n是元素的总数   那个树。简单地说,一个红黑色   树是二叉搜索树   智能地插入和删除   确保树是合理的   平衡的。

这本名为Programming ADO.Net 2.0核心参考的书籍对数据集有很好的描述,包括讨论的许多问题和内部数据结构。

数据集的主要实现依赖于红/黑自平衡树。

本书提到的另一个重要警告是,通过字符串查找数据代码没有得到有效实现,因为它使用字符串比较来搜索查找表中的相应列。通过对行数进行硬编码,您可以在表和列上获得相当好的查找性能提升。当然这是一个维护噩梦,除非你写一个工具为你做。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top