Я следую за этой отличной почтой от Rainer Stropek на 1. создании пользовательского элемента потока данных SSIS & 2. вытягивание данных из хранилища таблиц Azure. http://www.software-architects.com/devblog/2010/11/12/Custom-SSIS-Data-Source-For-Loading-Azure-Tables-Into-SQL-ServerPipelineBuffer не освобождает память
Я вставить код, который будет представлять какой-либо интерес к любому, кто пытается ответить на мой вопрос:
GenericTableContext context = new GenericTableContext(cloudStorageAccount.TableEndpoint.AbsoluteUri, cloudStorageAccount.Credentials);
public override void PrimeOutput(int outputs, int[] outputIDs, PipelineBuffer[] buffers) {
IDTSOutput100 output = ComponentMetaData.OutputCollection[0];
PipelineBuffer buffer = buffers[0];
foreach(var item in this.context.CreateQuery<GenericEntity>("SomeTable") {
buffer.AddRow();
for (int x = 0; x < columnInformation.Count; x++) {
var ci = (ColumnInfo) columnInformation[x];
var value = item[ci.ColumnName].Value;
if (value != null) {
buffer[ci.BufferColumnIndex] = value;
} else {
buffer.SetNull(ci.BufferColumnIndex);
}
}
}
Теперь Вопрос:
Мой набор данных очень велик ; скажем, миллион записей. У меня есть пакет SSIS в его простейшей форме, то есть мой пользовательский источник данных, записывающий данные в плоский файл назначения. У него нет никаких преобразований.
Когда я запускаю свой пакет, я могу видеть записи, записываемые в CSV-файл, в партиях около 10 000 записей (DefaultBufferMaxRows).
Моя проблема заключается в том, что эти записи записаны, но по-прежнему остаются в памяти. Это в конечном итоге заставляет мой пакет замедляться и останавливается. Вся память на моем сервере исчерпана.
Теперь я не эксперт по SSIS, но я предполагаю, что записи, которые я пишу в PipelineBuffer, не освобождаются после их потребления. слово «Буфер» подразумевает, что он может быть «покраснел». Но я не мог найти API для этого.
Итак, я думаю, мой вопрос: как я могу освободить память, выделенную для записей, которые уже были записаны в плоский файл, поэтому у меня достаточно памяти для остальных записей?
Спасибо, Nandun