У меня есть приложение на C#, которое должно добавить большие объемы текста в базу данных SQL Server (одна строка может содержать до 1 ГБ текста). Итак, у меня есть некоторый код, который выглядит следующим образом:Эффективное добавление больших объемов текста в базу данных
SqlParameter param = command.Parameters.Add("@text", SqlDbType.NVarChar);
param.Value = new string(buffer);
текст добавляется в куски, так что буфер говорят, 20 МБ. Я попытался уменьшить давление памяти за счет повторного использования буферов (в отличие от создания нового char [10000000] каждый раз, когда мне нужно добавить кусок). Я замечаю, что ADO.NET, по-видимому, выделяет новый буфер для каждого вызова моего sproc. Каждый раз, когда вызывается sproc, я вижу, что рабочий набор моего процесса растет почти на 20 МБ.
Теперь, вы можете подумать, что это из-за «новой строки (буфер)» (я), но я получаю такое же поведение, когда я
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