1 Востаннє редагувалося vitia444 (04.06.2015 23:00:14)

Тема: Обробка великих масивів даних

Маю програму, вона вилітає через System.OutOfMemoryException після того як розмір використовуваної пам'яті досягає 1600 МБ, при цьому не важливо, скільки саме вільно оперативки. Я так розумію десь стоїть обмеження, як його обійти/відмінити?

P.S. дані зберігаю у LinkedList, Windkws x64 8.1

2

Re: Обробка великих масивів даних

Жах!

Подякували: leofun011

3

Re: Обробка великих масивів даних

На Stackoverflow кажуть, що the maximum size of a CLR Object is 2gb even on 64bit. Хоча за логікою це не має стосуватися LinkedList. А взагалі - щось дивне робите.

4

Re: Обробка великих масивів даних

Ах да, забув одразу відповісти всім цікавим:

Програма моделює захворюваність 42 000 000 людей протягом 10 років (така задача, але і одного року змоделювати не може). Якщо брати 100 000 народу на 10 років, то там лише 40 Мб і все. Коли для 100 000 народу на 1000 років - то до 400 Мб доходило

P.S. цікаво, як зробити так, щоб пам'ять використовувалась вся, а не лише якийсь певний розмір

5

Re: Обробка великих масивів даних

koala написав:

На Stackoverflow кажуть, що the maximum size of a CLR Object is 2gb even on 64bit. Хоча за логікою це не має стосуватися LinkedList. А взагалі - щось дивне робите.

    <runtime>
      <gcAllowVeryLargeObjects enabled="true" />
    </runtime>

Цей рядок (який стосувався безпосередньо числа 2Gb) не допомагає

6

Re: Обробка великих масивів даних

vitia444

А що саме ви робите з таким списком? Може дані можна розбити на частини і обробляти частинами? Наприклад:

брати 100 000 народу на 10 років

а потім наступні 100 000 народу.

7

Re: Обробка великих масивів даних

Arete написав:

vitia444

А що саме ви робите з таким списком? Може дані можна розбити на частини і обробляти частинами? Наприклад:

брати 100 000 народу на 10 років

а потім наступні 100 000 народу.

Взагалі - можна, але хочеться просто для саморозвитку знайти в чому проблема і щоб воно брало весь розмір оперативки

P.S. якщо брати по 100 000 - то це вийде пристойно довше, включається вибір між часом і пам'яттю

8

Re: Обробка великих масивів даних

P.S. якщо брати по 100 000 - то це вийде пристойно довше, включається вибір між часом і пам'яттю

Від конкретної задачі залежить - структура даних, дії над цими даними - наприклад, алгоритми сортування Merge та QuickSort, з вами не згодні.

9 Востаннє редагувалося quez (05.06.2015 15:07:35)

Re: Обробка великих масивів даних

Щось нагуглив, може якось допоможе.

Чому ви моделюєте захворюваність для 42 млн, а не для двох-трьох тисяч?

Подякували: vitia4441

10

Re: Обробка великих масивів даних

Arete написав:

P.S. якщо брати по 100 000 - то це вийде пристойно довше, включається вибір між часом і пам'яттю

Від конкретної задачі залежить - структура даних, дії над цими даними - наприклад, алгоритми сортування Merge та QuickSort, з вами не згодні.

Основні операції що виконуються - перебір(постійно) та додавання-видалення(10% всіх операцій). З огляду на це я вибрав структуру даних LinkedList, про що вказав у топі треду.
Шановний Arete, спростити задачу я собі і сам зможу. Мене не цікавить зараз як зробити так, щоб воно займало менше пам'яті, я просто обмежу вхідні дані та й по всьому.
Мене цікавить чому викидається ця помилка, чому я не можу використовувати весь вільний простір оперативної пам'яті

11

Re: Обробка великих масивів даних

quez написав:

Щось нагуглив, може якось допоможе.

Чому ви моделюєте захворюваність для 42 млн, а не для двох-трьох тисяч?

лінк не повний

Ну це ніби стрес-тест)) у мене все чудово працює для 100 000, і на них я і будуватиму звіт

12

Re: Обробка великих масивів даних

Наприклад, ваша програма може викликати значну фрагментацію пам'яті. 42 мільйони об'єктів, кожен з яких, мабуть, ще й рядки містить, які активно створюються/видаляються - і в результаті є вільних, скажімо, 500МБ, але розбитих на маленькі фрагменти по 500б, і для нового об'єкту вже пам'яті нема.

13

Re: Обробка великих масивів даних

vitia444 написав:

лінк не повний

Виправив.

14 Востаннє редагувалося vitia444 (05.06.2015 15:57:21)

Re: Обробка великих масивів даних

Я це зробив)))))

http://s17.postimg.org/wnxfg1d7z/Untitled.png

Спрацювало коли сказав студії компілювати конкретно 64-бітну версію програми
+ можливо в app.config рядок, який я описав вище, що стосується GC

P.S. я не працюю з жорстким, це підкачка включилась

Подякували: koala, Arete2