C#導出數(shù)據(jù)到excel如何提升性能
一,要提升性能,我們先要知道耗時的地方在哪里
1,數(shù)據(jù)庫查詢,
2,把數(shù)據(jù)組合成新集合循環(huán)嵌套太多
二,那我們怎么優(yōu)化呢?
一,數(shù)據(jù)庫查詢,
1》,數(shù)據(jù)庫查詢:如果數(shù)據(jù)量小,我們可以用臨時datatable,連表查詢,,可是如果是連表都是千萬級上億數(shù)據(jù),就不建議用連表
那這個時候該怎么辦呢?
2》這個時候我們可以選擇先單表查詢,然后再循環(huán)體查詢自己所要的其他關(guān)聯(lián)數(shù)據(jù),這個時候我們需要注意的點是什么?
3》減少數(shù)據(jù)庫查詢?。。。。。。。?!這個是重點,那怎么減少呢?正常邏輯如下代碼,可是數(shù)據(jù)量很耗性能
foreach (var item in listST) { var sModel= GetModel(); //如果這個方法每次都查詢一次數(shù)據(jù)庫,會很耗性能?。?!導致循環(huán)循環(huán)很慢!,即時使用緩存也會很慢 item.name = sModel.name; }
4》我們可以換一種思路,優(yōu)化如下代碼:
List<Student> listST = new List<Student>(); List<int> listInt = new List<int>(); int g = 0; foreach (var item in listST) { ////我們可以選擇每兩千條數(shù)據(jù)查詢一次 ////保存成一個集合 if (g % 2000 == 0) { listST = GetList($"id in ({string.Join(",", listST.Skip(g).Take(2000).Select(m => m.id).Distinct().ToArray())})", 2000, 1, "name,Id"); } var sModel = listST.FirstOrDefault(m => m.id == item.id); item.name = sModel.name; g++; }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- C# 使用multipart form-data方式post數(shù)據(jù)到服務器
- 詳解C# 泛型中的數(shù)據(jù)類型判定與轉(zhuǎn)換
- 詳解C#數(shù)據(jù)類型及其轉(zhuǎn)換
- 詳解如何獲取C#類中發(fā)生數(shù)據(jù)變化的屬性信息
- c# 利用易福門振動模塊VSE002采集振動數(shù)據(jù)的方法
- C#使用TensorFlow.NET訓練自己的數(shù)據(jù)集的方法
- 基于C# 寫一個 Redis 數(shù)據(jù)同步小工具
- C#連接SQL Server數(shù)據(jù)庫的實例講解
- C# OleDbDataReader快速數(shù)據(jù)讀取方式(3種)
- c# 數(shù)據(jù)標注與數(shù)據(jù)校驗