2009-12-18 21 views
1

我有一個C#應用程序需要向SQL Server數據庫添加大量文本(一行最多可以有1GB的文本)。所以,我有一些看起來像這樣的代碼:向數據庫高效地添加大量文本

SqlParameter param = command.Parameters.Add("@text", SqlDbType.NVarChar); 
param.Value = new string(buffer); 

文本以塊的形式添加,所以緩衝區是20 MB。我試圖通過重新使用緩衝區來減少內存壓力(而不是每次需要添加塊時執行新的字符[10000000])。我注意到的是,ADO.NET似乎在每次調用sproc時都會分配一個新的緩衝區。每次調用sproc時,我都會看到我的進程的工作集增加了近20 MB。現在

,你可能會認爲這是因爲「新的字符串(緩衝)」(我做了),但我得到了相同的行爲,當我做

param = command.Parameters.Add("@text", SqlDbType.Text, buffer.Length); 
param.Value = buffer; 

有什麼辦法來防止ADO.NET從每次向數據庫中添加一段文本時進行額外的內存分配?

謝謝!

回答

0

如果您使用SqlDbType.VarBinarybyte[]數組,則ADO.NET將使用您提供的不經複製的緩衝區。

+0

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=522312 – Chris 2009-12-29 15:53:09

相關問題