有人可以给我一些指向资源,详细说明.NET DataSet类的底层结构和算法吗?
我目前正在使用一种不具备像DataSet类那样的通用内存数据结构实现的语言进行工作。我可能最终不得不自己构建一个(但不会像那么复杂!),但在开始乱搞之前,我希望能更好地了解现有系统是如何组合的。(感谢Douglas Hofstadter)
我正在通读 Mono 实现,但任何其他链接、文章或想法都会受到欢迎。
有人可以给我一些指向资源,详细说明.NET DataSet类的底层结构和算法吗?
我目前正在使用一种不具备像DataSet类那样的通用内存数据结构实现的语言进行工作。我可能最终不得不自己构建一个(但不会像那么复杂!),但在开始乱搞之前,我希望能更好地了解现有系统是如何组合的。(感谢Douglas Hofstadter)
我正在通读 Mono 实现,但任何其他链接、文章或想法都会受到欢迎。
点亮反射器,直接走向源头...
您可以合法地从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的关键数据结构是红黑树。
It is complex, but has good worst-case running time for its operations and is efficient in practice: it can search, insert, and delete in O(log n) time, where n is total number of elements in the tree. Put very simply, a red-black tree is a binary search tree which inserts and removes intelligently, to ensure the tree is reasonably balanced.
名为《编程ADO.Net 2.0核心参考》的书具有出色的数据集描述,包括许多问题和内部数据结构的讨论。
数据集的主要实现依赖于红黑平衡树。
书中提到的另一个重要注意事项是,通过字符串查找数据代码的查找方法效率不高,因为它使用字符串比较在查找表中搜索适当的列。通过硬编码行号,您可以在两个表格和列上获得相当大的提高查找性能。当然,除非您编写一个工具来完成此操作,否则这将是维护噩梦。