客户有个需求,导出页面一个月的数据,大概30W的数据需要一次性导出到EXCEL,因为之前做地太急,没有做异步导出。所以因为循环量过大,超时(1分钟超时)报错。
表结构是 一个 父表,一个子表,父表和子表是一对多的关系,还有一些其他的配置表。
优化步骤1:去掉多余的join,只保留父表,子表两个表查出数据,配置表全部取出放到内存中
优化步骤2:用.AsParallel().ForAll()方法异步循环,异步循环需要用线程安全的集合,不然会丢失数据
完成上面两个步骤后,结果还是超时,然后发现是配置表是List类型导致的,在循环内通过List取查数据,效率太低
优化步骤3:把配置表数据全部转成Dictionary,然后通过字典取配置表数据。
30万的数据在客户的环境里,导出大概用了50多秒,差一点超时,不过好歹是能导出了