我有一个Firebird数据库,包含一个联系人列表,并且对于每个联系人,作为服务和发票列表。c#DataAdapter.Fill性能改进
客户表的数量级为10k,发票/服务约为联系人大小的5倍。问题是这些表格包含很多列(最多150列)。我知道这并不理想,但不幸的是,我无法重新设计数据库,因为它是按原样强加的。
现在,我有时间的显著部分(事实上,有近40%-50%),使用以下代码花费在数据的纯取:
DataTable dataTable = new DataTable();
dataTable.BeginLoadData();
FbDataAdapter fda = new FbDataAdapter(command);
fda.Fill(dataTable);
dataTable.EndLoadData();
我相当的事实,失望获取30k行需要大约20秒的时间才能拨打唯一的Fill
电话。有没有希望改进这部分?任何替代(可能是商业)来改善这一点?
你为什么要加载30,000行?你在做报告吗? –
你绝对需要一次加载所有内容吗?如果不是,那么最简单的解决方案将是实现某种分页(阅读:一次加载一个较小的数字记录,然后移动到下一个位)。 – stybl
- 是的。我使用缓冲方法,因为我需要对数据集进行灵活而沉重的搜索。基于内存的搜索是很多的,在这种情况下比服务器端快得多...... – neggenbe