C# 数据计算性能问题

wangping06 2015-08-21 11:15:58
DataTable计算的性能问题,请大神指导:
现在从数据库获取8000条左右的数据到DataTable,
有6000条表达式,数据需要从这个表里计算出结果;

现在的写法是
DataTable dt;
string computeExp="sum(amount)"
Foreach(string filter in lstFilter)
{
decimal value=dt.Compute(computeExp,filter);
}

其中DataTable里有10个左右的字段, filter根据多个字段的进行过滤,这样每次计算大概就要1S,6000条表达式就需要1.5个小时,有没好的优化建议。。
...全文
247 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ajianchina 2015-08-21
  • 打赏
  • 举报
回复
引用 3 楼 wangping06的回复:
如果不用DataTable,有没有性能更好的集合方法呢?
如果业务上不能改的话,你可以尝试用List加PLinq并行计算,我看到你这里基本上是单条不相关计算,应该能提高速度,如果是关联的就不能这样,轻则反而变慢,重则数据出错。
wangping06 2015-08-21
  • 打赏
  • 举报
回复
类似于交叉报表的需求
wangping06 2015-08-21
  • 打赏
  • 举报
回复
具体业务是这样的,销售订单有很多客户,现在需要根据客户+一些具体条件,计算出某个客户在某些条件下订单的金额,这个条件是需要人员自己录入的。这样导致一个表中有很多的计算表达式。
xuzuning 2015-08-21
  • 打赏
  • 举报
回复
这种事情应在在数据库里搞定 说说你的具体要求
  • 打赏
  • 举报
回复
我只想知道你这 6000个表达式是怎么来的,应该是有些结果是另一个些结果的进一步汇总吧
wangping06 2015-08-21
  • 打赏
  • 举报
回复
楼上批评的对,但从客户的需求来看,也是合理的。只是技术上不应该这样实现,也可以换个角度想如何优化代码结构。
  • 打赏
  • 举报
回复
如果筛选本来就很慢,那么你就不应该集中批处理。
  • 打赏
  • 举报
回复
必须从业务角度重构。 技术本身算个屁啊,如果你滥用技术而不重视业务设计,那么就会出现尴尬的结果。
wangping06 2015-08-21
  • 打赏
  • 举报
回复
如果不用DataTable,有没有性能更好的集合方法呢?
wangping06 2015-08-21
  • 打赏
  • 举报
回复
没有其他的计算,主要是需要根据条件拼接成6000条SQL,到数据库查询的话,也比较耗性能。
gw6328 2015-08-21
  • 打赏
  • 举报
回复
看样子可以去数据库里查询地方地算 sum 一下, 再看看你还有什么其它的计算?

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧