OutOfMemoryException Обработка большого файла - PullRequest
3 голосов
/ 30 марта 2010

Мы загружаем большой плоский файл в BizTalk Server 2006 (оригинальный выпуск, а не R2) - около 125 МБ. Мы запускаем карту против нее, а затем берем каждую строку и вызываем хранимую процедуру.

Мы получаем исключение OutOfMemoryException во время обработки оркестровки, служба Windows перезапускается, использует всю память объемом 2 ГБ и снова падает.

Сервер 32-битный и настроен на использование ключа / 3GB.

Также я разделил поток на 3 хоста - один для получения, другой для оркестровки и третий для отправки.

У кого-нибудь есть предложения по обработке этого файла без ошибки?

Спасибо, Крип

Ответы [ 2 ]

3 голосов
/ 07 апреля 2010

Если это плоский файл, отправляемый через карту, вы конвертируете его в XML, верно? Увеличение размера может быть огромным. XML может легко добавить в 5-10 раз больше плоского файла. Особенно если вы используете описательные или длинные имена тегов xml (что обычно и происходит).

Что-то простое, что вы можете попробовать, это переименовать узлы xml в более короткие имена, в зависимости от количества записей (звучит как много), это может на самом деле оказать довольно значительное влияние на ваш объем памяти.

Возможно, более корпоративный подход заключается в разделении этого в пользовательском конвейере на отдельные пакеты сообщений, которые могут передаваться через систему в более управляемых порциях (аналогично тому, что предлагает Крис). Тогда система регулирования и памяти могут вступить во владение. Не зная больше о ваших данных, было бы трудно сказать, как лучше всего это сделать, но с файлом размером 125 МБ я предполагаю, что у вас, вероятно, есть тонна повторяющихся строк, которые не нужно обрабатывать последовательно.

2 голосов
/ 30 марта 2010

Где происходит сбой? Это делает это мимо формы Преобразования? Еще одно предложение - запустить преобразование в порту приема. Для более эффективной обработки вы могли бы даже отладить сообщение и иметь несколько одновременных экземпляров оркестровки, вызывающих хранимые процессы. Это определенно уменьшит профиль памяти и увеличит производительность.

...