我有一个C应用程序需要向SQL Server数据库添加大量文本(一行最多可以包含1GB的文本)。所以,我有一些代码看起来像:
SqlParameter param = command.Parameters.Add("@text", SqlDbType.NVarChar);
param.Value = new string(buffer);
文本是分块添加的,所以缓冲区就是20 MB。我试图通过重新使用缓冲区来降低内存压力(而不是每次需要添加块时都做一个新的char[10000000])。我注意到ADO.NET似乎每次调用存储过程时都在分配一个新的缓冲区。每次调用存储过程时,我都会看到进程的工作设置增加了几乎20 MB。
现在,您可能认为这是因为“new string(buffer)”(我做了),但是当我做的时候,我会得到相同的行为。
param = command.Parameters.Add("@text", SqlDbType.Text, buffer.Length);
param.Value = buffer;
是否有任何方法可以阻止ADO.NET在每次向数据库添加文本块时进行额外的内存分配?
谢谢!