亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 C# Web 應用程序中將 SQL Server 表中超過 100 萬行導出到 CSV?

如何在 C# Web 應用程序中將 SQL Server 表中超過 100 萬行導出到 CSV?

C#
動漫人物 2023-07-22 16:42:15
我正在嘗試將包含 100 萬行和 45 列的 SQL Server 表導出到一個.csv文件,供用戶通過 Web 界面下載,但需要很長時間,最終我不得不手動停止該過程。我使用 aSqlDataReader并在讀者讀取時寫入文件以避免內存問題。該代碼適用于小表(少于 3k 行),但大表繼續運行,并且目標文件保持在 0 KB。using (spContentConn) { using (var sdr = sqlcmd.ExecuteReader())? ? using (CsvfileWriter)? ? {?? ? ? ? DataTable Tablecolumns = new DataTable();? ? ? ? for (int i = 0; i < sdr.FieldCount; i++)? ? ? ? {? ? ? ? ? ? Tablecolumns.Columns.Add(sdr.GetName(i));? ? ? ? }? ? ? ? CsvfileWriter.WriteLine(string.Join("~", Tablecolumns.Columns.Cast<DataColumn>().Select(csvfile => csvfile.ColumnName)));? ? ? ? while (sdr.Read())? ? ? ? ? ? for (int j = Tablecolumns.Columns.Count; j > 0; j--)? ? ? ? ? ? {? ? ? ? ? ? ? ? if (j == 1)? ? ? ? ? ? ? ? ? ? CsvfileWriter.WriteLine("");? ? ? ? ? ? ? ? else? ? ? ? ? ? ? ? ? ? CsvfileWriter.Write(sdr[Tablecolumns.Columns.Count - j].ToString() + "~");? ? ? ? ? ? }? ? }我使用了該線程中推薦的相同答案,但仍然不起作用。請幫忙。?
查看完整描述

1 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

從.NET文檔中并不清楚是否具有有效的緩沖,因此當我需要讀/寫大量數據時FileWriter我總是使用a代替。BufferedStream使用流,您必須編寫字節數據而不是字符串,但這只需要對代碼進行少量調整。

看起來您正在DataTable循環中讀取和寫入 a 的列,這會影響性能。由于在導出操作期間列的數量和順序不會改變,因此請考慮使用位置索引來訪問列值。一次寫入一行而不是一次寫入一列會更好。

最后,您正在使用數據讀取器,因此它應該提供來自 SQL Server 的最佳數據吞吐量(顯然,受到服務器和帶寬的限制)。這也表明性能瓶頸在于將數據寫入文件的方式。

作為比較,我在 60 秒內將 1,000,000 行(每行 45 列)寫入一個文本文件。當然,我的代碼不會從數據庫中讀取,但這仍然應該為您提供足夠好的基線。


查看完整回答
反對 回復 2023-07-22
  • 1 回答
  • 0 關注
  • 155 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號