2008-10-07 3 views
1

Я использую C#, и я получаю ошибку System.OutOfMemoryException после того, как прочитал в 50 000 записей, что лучше всего подходит для обработки таких больших наборов данных? Будет ли пейджинговая помощь?System.OutOfMemoryException с использованием C# на большом наборе данных

Благодаря

+0

Хм, на какой платформе мы говорим здесь? Какой язык программирования? Что такое операционная система? – Cetra 2008-10-07 22:51:58

ответ

0

Если вы используете XML, только что прочитал несколько узлов на момент времени. Если вы используете какой-то другой формат, просто прочитайте несколько строк (или что-то еще) за раз. Не загружайте всю вещь в память, прежде чем приступить к ее работе.

2

Вы по-прежнему не должны читать все сразу. Читайте в кусках, затем напишите фрагмент файла mdb, затем прочитайте еще один фрагмент и добавьте его в файл. Чтение в 50 000 записей сразу просто вызывает проблемы.

1

Очевидно, что вы не можете прочитать все данные в памяти перед созданием файла MDB, иначе вы бы не выбрали исключение из памяти. :-)

У вас есть два варианта: - разбиение - читать данные в меньшие куски с помощью фильтрации - виртуализация - разделить данные на страницах и загрузить только текущую страницу

В любом случае, вы должны создайте файл MDB и передайте данные после этого в кусках.

4

Я мог бы рекомендовать создание файла MDB и использование DataReader для потоковой передачи записей в MDB, а не для чтения и кэширования всего набора данных локально. С DataReader процесс более ручной, но вы получаете только одну запись за раз, чтобы не заполнить свою память.

0

Я хотел бы предложить использовать generator:

»... вместо того, чтобы строить массив, содержащий все значения и возвращает их все сразу, генератор дает значения по одному, который требует меньше память и позволяет вызывающему абоненту сразу начать обработку первых нескольких значений. Короче говоря, генератор выглядит как функция, но ведет себя как итератор ».

В статье википедии также имеет несколько good examples

Смежные вопросы