Независимо от структурата на данните, която ще използвате, вашето потребление на памет никога няма да падне под паметта, необходима за съхраняване на всичките ви данни.
Изчислихте ли колко памет е необходима за съхраняване на един обект от клас на екземпляр?
Вашето кодиране на Huffman е спестяваща място оптимизация, което означава, че вие сами елиминирате много дублирани данни в обектите на вашия клас. Това няма нищо общо със структурата на данните, която използвате, за да съхранявате вашите данни. Това зависи от това как са структурирани самите ви данни, така че да можете да се възползвате от различни стратегии за пестене на място (от които кодирането на Huffman е една от многото възможности, подходящо за елиминиране на често срещани префикси и структурата на данните, използвана за съхраняването им, е дърво) .
Сега да се върна на въпроса ви. Без да оптимизирате вашите данни (т.е. обекти), има неща, които можете да внимавате, за да подобрите ефективността на използването на паметта.
Всички наши обекти с еднакъв размер ли са?
Просто изпълнихте ли цикъл, разпределихте памет в движение, след което ги вмъкнахте в списък, като този:
foreach (var obj in collection) { myList.Add(new myObject(obj)); }
В този случай вашият списък обект непрекъснато се разширява. И ако в края няма достатъчно свободна памет за разширяване на списъка, .NET ще разпредели нова, по-голяма част от паметта и ще копира оригиналния масив в новата памет. По същество завършвате с две части от паметта -- оригиналната и новата разширена (сега държи списъка). Направете това много много много пъти (както очевидно трябва за GB данни) и гледате МНОГО фрагментирани пространства в паметта .
Ще бъде по-добре просто да разпределите достатъчно памет за целия списък наведнъж.
Като бележка не мога да не се запитам: как, за бога, света ще търсите в този ОГРОМЕН списък, за да намерите нещо, от което се нуждаете? Не трябва ли да използвате нещо като двоично дърво или хеш-таблица, за да ви помогне в търсенето? Може би просто четете всички данни, извършвате известна обработка на всички тях, след което ги записвате обратно...
person
Stephen Chung
schedule
25.03.2011