替代数据结构的DataTable
我需要某种形式的数据结构来做到以下几点:替代数据结构的DataTable
一个“设置”很多类型,如字符串,整数,日期时间和双组成。 动态添加了许多套 动态地检索集信息被拉动的地方
现在显而易见的解决方案是使用DataTable。定义数据表结构,并在每次需要添加新集时添加一个新行。在需要时从数据表中提取数据。
其实我已经实现它已经使用数据表,但问题是它是非常缓慢的出于某种原因。既然这样做了数千到数百万倍的性能可能会有问题。
是否有一个替代数据类型的数据结构具有更好的性能,我可以使用或者我应该建立我自己的类使用列表<>?
根据您的使用情况,我建议使用List<object[]>
(因为您提到了动态模式)作为中心数据结构,但是如果您以后需要使用,则需要自己维护模式信息。
如果您需要将UI绑定到数据上,这种方法会增加许多额外的手动工作,所以它更适合于后台处理大量数据。
我们在过去曾经使用过这种方法,并且在批量处理数据与数据表相比时,能够节省2/3的内存和80%的执行时间。
嘿,那里,谢谢你的建议!我认为这可能只是工作,我从来没有使用过object []。 80%的执行速度?这是更快但不是太多。 – user1035217 2012-02-17 12:36:40
这是一个误解,它的运行速度没有提高20%,由于'DbDataReader'到'DataTable'代码的开销,它的运行速度提高了80%。 – ntziolis 2012-02-17 12:39:08
好吧,我看到嘿嘿,那就很好。我将实施它并查看我得到的性能改进。谢谢! – user1035217 2012-02-17 12:40:16
解决类似问题的另一种方法是:在内存中使用sqlite数据库。
听起来像是一件奇怪的事情,但是您可以将相当复杂的结构放入表格中,并且可以使用SQL的全部功能处理数据。 SQLite是一个小小的库,所以它不会膨胀你的代码。首先将数据库集成到代码中可能有点奇怪,但是性能应该可以在巨大的数据集上工作(因为这就是数据库的原因)。如果您需要将该数据保存到磁盘,则您已完成。
根据问题的细节,移动到更大的数据库后端(例如postgres)可能是个好主意,但是很难从这里知道。只是不要轻易驳斥这个想法。
数据类型是可重用的还是需要动态的,您可以使用匿名类型吗?这也取决于你在哪里读取Data,DataBase,文件,队列等,因为ADO.Net和Entity Framework有很多内置功能。 – Lloyd 2012-02-17 12:29:23
嘿那里, 数据类型是可重用的,一旦设置它是静态的。只有实际的数据发生变化,添加和删除条目。我不知道匿名类型是什么。 该数据是自我生成的,它不是从任何东西中读取的 – user1035217 2012-02-17 12:38:05