第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何在 C# Web 應(yīng)用程序中將 SQL Server 表中超過 100 萬行導(dǎo)出到 CSV?

如何在 C# Web 應(yīng)用程序中將 SQL Server 表中超過 100 萬行導(dǎo)出到 CSV?

C#
動漫人物 2023-07-22 16:42:15
我正在嘗試將包含 100 萬行和 45 列的 SQL Server 表導(dǎo)出到一個.csv文件,供用戶通過 Web 界面下載,但需要很長時間,最終我不得不手動停止該過程。我使用 aSqlDataReader并在讀者讀取時寫入文件以避免內(nèi)存問題。該代碼適用于小表(少于 3k 行),但大表繼續(xù)運行,并且目標(biāo)文件保持在 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條經(jīng)驗 獲得超4個贊

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

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

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

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


查看完整回答
反對 回復(fù) 2023-07-22
  • 1 回答
  • 0 關(guān)注
  • 153 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號