有效地向数据库添加大量文本

时间:2009-12-18 14:42:25

标签: c# .net-3.5 ado.net

我有一个C#应用程序需要向SQL Server数据库添加大量文本(一行最多可以有1GB的文本)。所以,我有一些看起来像的代码:

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

文本以块的形式添加,因此缓冲区为20 MB。我试图通过重新使用缓冲区来减少内存压力(而不是每次我需要添加块时执行新的char [10000000])。我注意到的是ADO.NET似乎每次调用我的sproc时都会分配一个新的缓冲区。每次调用sproc时,我都会看到我的进程的工作集几乎上升了20 MB。

现在,您可能认为这是因为“新字符串(缓冲区)”(我做过),但是当我这样做时我会得到相同的行为

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

有没有办法阻止ADO.NET每次向数据库添加一大块文本时都进行额外的内存分配?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您将SqlDbType.VarBinarybyte[]数组一起使用,则ADO.NET将使用您提供的缓冲区而不进行复制。