System.OutOfMemoryException выдается при загрузке всех данных одновременно - PullRequest
0 голосов
/ 03 октября 2018

Я работаю с базой данных, которая содержит почти 8 миллионов записей в одной таблице.Я знаю, что это огромные данные, и не следует загружать их все сразу.Но для моего проекта важно загрузить все эти записи в набор данных, который находится в памяти.

Когда я пытаюсь заполнить данные в наборе данных, используя следующий код:

Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            foreach (Component component in EnumerateComponents())
            {
                string name = component.GetType().Name;
                if (name.Contains("baghadadpTableAdapter"))
                {
                    string TableName = name.Substring(0, name.IndexOf("TableAdapter"));
                   baghadadpTableAdapter1.Fill(ds1.persons);
                }
            }
            stopwatch.Stop();
            TimeSpan time = stopwatch.Elapsed;

следующая ошибка возникает в строке "baghadadpTableAdapter1.Fill (ds1.persons);":

System.OutOfMemoryException: 'Exception of type 'System.OutOfMemoryException' was thrown.'

Как решить эту проблему и одновременно загрузить все эти огромные данные для лиц, которые могут получить данные в ds1

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

DataTable, как известно, плохо для больших сетов.Я видел таблицы, которые используют 6-7 раз столько памяти, сколько необработанных данных.

Если вам действительно нужно хранить такое количество данных в памяти, тогда рассмотрите возможность перехода на List объектов домена, а не на DataTable.Но я также бросаю вызов «необходимости» хранить миллионы или записи в памяти.

0 голосов
/ 03 октября 2018

Я бы просто просмотрел набор данных.Есть несколько различных способов сделать это, которые вы можете исследовать.

0 голосов
/ 03 октября 2018

Вы можете:

  • увеличить объем памяти на машине,
  • загрузить только соответствующие столбцы.

В конечном счете вам потребуетсяПодумайте, как обрабатывать записи кусками.Я не знаю, как работает ваше приложение, но я не встречал сценарий, когда приложение должно иметь супер быстрый доступ к 8 миллионам объектов.

...