2009-12-18 61 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

相关问题