Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.04;
Скачать: CL | DM;

Вниз

Резкое увеличение размера динамического массива   Найти похожие ветки 

 
Германн ©   (2007-10-12 00:56) [40]

Блин. Даже я ошибся. :-(

Вот цитата из первоисточника:
Горбушка, презиравший рассуждения о высоких материях, был больше поэтом и назвал свой журнал исключительно поэтично:
ЗОРИ
     Однако Горбушка при всех своих поэтических талантах был безграмотен и уже с первого номера скандально опростоволосился.
     На первой странице Горбушкиного издания по случаю бывшего месяца три назад спектакля красовался рисунок из пушкинского "Бориса Годунова".
     Рисунок Горбушки изображал Японца в роли Годунова, с большим жезлом в руке.
     Но не рисунок заставил всю школу покатываться со смеху, а пояснительная надпись под ним: Юлыстрация к трогедие "Борис Гадунв".
     Горбушка умудрился в пяти словах сделать семь ошибок и здорово поплатился.
     Поэтичные "Зори" читали все и не потому, что шкидцев очень уж интересовала поэзия, их читали как .хороший юмористический журнал, и даже Янкель обижался:
     - Сволочь этот Горбушка... Конкурент.


 
vint45   (2007-10-12 15:47) [41]

Насколько я понял из постов
> Galinka ©   11.10.07 22:26) [24] и
> Anatoly Podgoretsky ©   (11.10.07 22:28) [25]
лавинообразное увеличение памяти связано с особенностью работы менеджера памяти D6. Бороться с этим можно:
1. > vpbar ©   (11.10.07 20:08) [22]
Заменой динамических массивов на использование TList (минус этого, имхо работать с динамическими массивами легче, но это чисто субъективно)
2. > Sapersky   (11.10.07 19:59) [19]
Использованием альтернативного модуля для работы с массивами (ничего сказать не могу, т.к. не работал с модулем)
3. Есть третий вариант. Замена AnsiString на PChar, т.е. в массив будут помещаться строки PChar. Менеджер памяти в этом случае ведет себя корректно, по крайней мере менеджер задач показывает выделение памяти для процесса в пределах 3Мб. Правда не факт, что в других случаях, менеджер будет вести себя столь же корректно, потому как мне не понятны отличия при выделении памяти AnsiString и PChar (хотя PChar "родной" тип винды и для работы с ним вроде как используются системные функции, а следовательно системный менеджер памяти).

зы: в подтвержние об освождении фрагментированной памяти я провел такой эксперимент со строками AnsiString. Задал для сканирования довольно большой каталог с условием, чтобы выделялось достаточно большой объем памяти, но программа при этом не вылетала с ошибкой "Out of memory". После сканирования диспетчер задач показывал объем выделенной памяти около 100Мб, а после наступления определенного события (у меня например после минимизации окна приложения), диспетчер показал 1Мб :)


 
Sapersky   (2007-10-12 16:11) [42]

Использованием альтернативного модуля для работы с массивами (ничего сказать не могу, т.к. не работал с модулем)

Он скорее дополняющий, чем альтернативный. Реализует алгоритм подобный тому, что используется в TList, для обычных дин. массивов (Length(array) играет роль Capacity, реальная длина хранится в отдельной переменной).
Используется примерно так:

Type
PFile = ^TFile;
TFileArr = array of TFile;

...

  arrFiles: array of TFile;
  FileCnt : Integer = 0;

...

With PFile( Arr_AddItem(arrFiles, TypeInfo(TFileArr), FileCnt) )^ do begin
  Folder:=InitPath;
  FullName:=Path+sr.Name;
  Size:=sr.Size;
end;

Метод перевыделения памяти "в 2 раза больше, чем было" (см. Arr_Grow) может показаться чрезмерно экстремальным, но на практике он показывает себя лучше, чем "экономное" приращение на 1 элемент (в вашем примере - 5 мб по диспетчеру задач). Хотя не буду утверждать, что это идеальное решение для всех случаев.



Страницы: 1 2 вся ветка

Текущий архив: 2007.11.04;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.019 c
2-1192167883
kyn66
2007-10-12 09:44
2007.11.04
TRxDBLookupCombo вместе с MSSQL


15-1191450765
Суслик
2007-10-04 02:32
2007.11.04
adwords от гугл


3-1182775113
dest81
2007-06-25 16:38
2007.11.04
права доступа в ib


2-1192004516
Unknown user
2007-10-10 12:21
2007.11.04
выделение большого объема памяти


2-1192098952
Антон Шестаков
2007-10-11 14:35
2007.11.04
количество дней