Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 23.12.2017, 18:36   #1
shvarz23
 
Регистрация: 10.12.2017
Сообщений: 5
Репутация: 10
По умолчанию Не хватает памяти для сортировки

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

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

Хотя, если еще суммировать то, что 1888 мб памяти идет на выделение на видео чип, то получается не хватает.

Вот код коллекции, напишите как можно оптимизировать , может можно как-то удалять сразу допустим строковый массив ,а не ждать пока компилятор сам удалит из кучи:

Код:


class RadRad 
    {
        public double caPosl { get; set; }
        public ulong indPosl { get; set; }
        public double x1 { get; set; }
        public double x2 { get; set; }
        public double x3 { get; set; }
        public double x4 { get; set; }
        public double x5 { get; set; }
        public double x6 { get; set; }
        public double x7 { get; set; }
    }



listrad = listrad.OrderBy(x => x.caPosl).ThenBy(x => x.x1).ThenBy(z => z.x2).ThenBy(y => y.x3).ThenBy(s => s.x4).ThenBy(h => h.x5).ThenBy(u => u.x6).ToList();

Да и еще ,пробовал выводить не весь массив (8млн строк), а только 2 милиона строк , программа работает без ошибок.

напишите пожалуйста как с этим бороться, заранее спасибо..
Скрины прикреплены.
Изображения
Тип файла: jpg Image 1.jpg (88.0 Кб, 1 просмотров)
Тип файла: jpg Image 2.jpg (85.8 Кб, 1 просмотров)
Тип файла: jpg Image 4.jpg (98.2 Кб, 1 просмотров)
Тип файла: jpg Image 5.jpg (98.9 Кб, 0 просмотров)
Тип файла: jpg Image 6.jpg (97.2 Кб, 2 просмотров)

Последний раз редактировалось shvarz23; 23.12.2017 в 18:55.
shvarz23 вне форума   Ответить с цитированием
Старый 23.12.2017, 18:51   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,505
Репутация: 1855

icq: 216409213
По умолчанию

Гуглить по словам - внешняя сортировка. И стоит начать ходить на занятия, хотя бы для того, чтобы знать по каким словам гуглить.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 23.12.2017, 18:53   #3
shvarz23
 
Регистрация: 10.12.2017
Сообщений: 5
Репутация: 10
По умолчанию

сейчас еще раз проверил, на 4,8 милиона строк сортирует нормально без ошибок, а на 4,9 миллиона строк уже ошибку выдает, хотя памяти еще дофига .
В чем проблема подскажите, как можно решить или обойти?
Изображения
Тип файла: jpg Image 7.jpg (101.8 Кб, 2 просмотров)
shvarz23 вне форума   Ответить с цитированием
Старый 23.12.2017, 18:58   #4
shvarz23
 
Регистрация: 10.12.2017
Сообщений: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Гуглить по словам - внешняя сортировка. И стоит начать ходить на занятия, хотя бы для того, чтобы знать по каким словам гуглить.
Я уже давно не хожу на занятия, отучился.
Может нужно типы другие использовать, decimal например .
Ну кто-нибудь напишите или скажите куда идти искать , только не на 3 буквы и не на 5.
shvarz23 вне форума   Ответить с цитированием
Старый 24.12.2017, 16:47   #5
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 21,006
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

как минимум вам LINQ тут не подходит.
LINQ создает копию данных.

памяти может еще и есть, но вот выделить большой массив не выходит.

ну и в идеале да, внешняя сортировка.
как банальный вариант можно БД юзать.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Старый 24.12.2017, 17:12   #6
pu4koff
Профессионал
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,612
Репутация: 3613
По умолчанию

Для чего данные в итоге нужны? Если нужно просто файл отсортировать - это одно, если показать упорядоченные данные - другое.
__________________
http://coub.com/view/2hhtg
pu4koff вне форума   Ответить с цитированием
Старый 24.12.2017, 22:30   #7
shvarz23
 
Регистрация: 10.12.2017
Сообщений: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Для чего данные в итоге нужны? Если нужно просто файл отсортировать - это одно, если показать упорядоченные данные - другое.
Да отсортировать, а выводить я их все равно буду по 30 штук из массива, так как там памяти не хватит для вывод всех 8 миллионов строк в датагридвием.
shvarz23 вне форума   Ответить с цитированием
Старый 24.12.2017, 22:33   #8
shvarz23
 
Регистрация: 10.12.2017
Сообщений: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Для чего данные в итоге нужны? Если нужно просто файл отсортировать - это одно, если показать упорядоченные данные - другое.
данные нужны для сортировки и потом вывод их на экран, выводить буду частями, если внешнюю сортировку делать хз, если бы была зада просто от наим к наибольшему расположить , то да.
А там по разрядам сравнивать в строке, по максимальному сзначению сред ариф в строке, и ранжировать ряды ...
shvarz23 вне форума   Ответить с цитированием
Старый 25.12.2017, 00:32   #9
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,505
Репутация: 1855

icq: 216409213
По умолчанию

Тогда БД
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 25.12.2017, 00:54   #10
pu4koff
Профессионал
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,612
Репутация: 3613
По умолчанию

Вариантов несколько:
1) Внешнюю сортировку можно под что угодно адаптировать. Для средних арифметических может придётся лишний раз файл перечитывать, но зато на выходе будет отсортированный файл, который можно будет относительно быстро читать кусками в грид и не нужно будет переупорядочивать при следующем запуске программы.
2) Файл в принципе подходит под формат csv, можно попробовать посмотреть в сторону OleDb провайдера который Microsoft Jet, он вроде умеет этот формат. Но я сомневаюсь, что этот провайдер как-то волшебным образом всё отсортирует на лету
3) Раз уж у нас пагинация нарисовывается, то просто при получении каждой порции данных читать весь файл построчно. При получении первых элементов всё просто. Читаем строку из файла, помещаем в свою упорядоченную коллекцию на соответствующее место. Если коллекция стала содержать больше 30 элементов, то удаляем последний. И так читаем все строки файла и на выходе будет первые 30 элементов. Немного заморочиться и можно будет сделать по этому принципу получение 3-й страницы из 30 элементов. Минус тут в скорости получения страниц данных - на каждый чих будет полностью файл перечитываться, но памяти много не будет нужно.
__________________
http://coub.com/view/2hhtg
pu4koff вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для тестирования памяти, тестирование ячеек памяти Hunter557 Assembler 0 30.01.2011 20:20
При запуске ругается:"не хватает памяти..." kim_klim Свободное общение 3 19.01.2011 16:39
Не хватает памяти для записи рисунка в БД Pound БД в Delphi 3 11.01.2011 19:53
не хватает памяти Dimarik Общие вопросы C/C++ 5 17.09.2009 00:16
Не хватает памяти.Из-за того, что Паскаль старый? delphyok Паскаль 4 17.05.2009 15:49


18:34.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru