Re: [.Net] Коллекция для хранения больших объемов данных
От: 80LevelElf http://80levelelf.com
Дата: 01.07.14 19:56
Оценка:
Здравствуйте, 80LevelElf, Вы писали:

LE>Здравствуйте, какое-то время назад написал свой контейнер, специально приспособленный для хранения больших объемов данных, для которых List и LinkedList будут работать крайне неэффективно. Например при вставке в середину List'a с 10к элементов нам придется сдвинуть "вправо" 5к элементов, если вообще не случиться переполнения(если capacity == 10к) и не придется выделять новую память. Старался соблюсти разумный компромисс между скоростью и требованию к памяти.


LE>Единственный найденный мною аналог — библиотека PowerCollections(а именно элемент BigList) от дяди Рихтера(вернее его компании) не понравилась ввиду сильного проседания во многих местах. Например, заполнение коллекции из 10^5 с середины:



LE>
LE>for(int i=0;i<10000;i++)
LE>{
LE>   collection.Insert(collection.Count/2, i);
LE>}
LE>

LE>у меня происходит за 120 мсек, у дяди Рихтера за 15 сек.
LE>Или следующий код в массиве из 10^4 элементов:

LE>
LE>for (int i = 0; i < 10000; i++)
LE>{
LE>   collection.IndexOf(i);
LE>}
LE>

LE>у меня выполняется за 60 мсек, у дяди Рихтера за 2 сек.
LE>Конечно, далеко не везде удалось достичь таких результатов, но вроде бы удалось достичь того, чтобы нигде не было таких сильных мест проседания(насколько это возможно).
LE>Если вы думаете, что это за счет оперативной памяти, то процесс с коллекцией из 10 миллионов(10^7) int'ов, заполненных в цикле с помощью Add() у ДР берет 67.1 мб, а у меня 48.7

LE>Не хотелось бы сейчас все обрисовать куда лучше, чем есть на самом деле, поэтому если интересно сама библиотека здесь, в виде dll занимает всего около 30 кб.


LE>К тому же если есть знающие люди, они наверняка найдут множество мест, где моя библиотека проигрывает ДР, да и не стоит забывать про качество нового проекта любителя и вылизанного годами проекта самого ДР.


P.S>> изначально расположил пост тут: http://www.rsdn.ru/forum/src/ , но вскоре увидел, что эта ветка форума практически мертва, поэтому извините за такой косяк и если можно удалите её оттуда.


Разобрался как удалить первую тему, еще раз прошу прощения за косячность.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.