客戶有個需求,導出頁面一個月的數據,大概30W的數據需要一次性導出到EXCEL,因為之前做地太急,沒有做異步導出。所以因為循環量過大,超時(1分鍾超時)報錯。
表結構是 一個 父表,一個子表,父表和子表是一對多的關系,還有一些其他的配置表。
優化步驟1:去掉多余的join,只保留父表,子表兩個表查出數據,配置表全部取出放到內存中
優化步驟2:用.AsParallel().ForAll()方法異步循環,異步循環需要用線程安全的集合,不然會丟失數據
完成上面兩個步驟后,結果還是超時,然后發現是配置表是List類型導致的,在循環內通過List取查數據,效率太低
優化步驟3:把配置表數據全部轉成Dictionary,然后通過字典取配置表數據。
30萬的數據在客戶的環境里,導出大概用了50多秒,差一點超時,不過好歹是能導出了