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从每次向数据库中添加一段文本时进行额外的内存分配?
谢谢!
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=522312 – Chris 2009-12-29 15:53:09