Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
Германн ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.046 c
3-1182526300
GanibalLector
2007-06-22 19:31
2007.11.04
Unable to complete network request to host "localhost"


11-1175198781
ElectriC
2007-03-30 00:06
2007.11.04
a-la KeyPreview


9-1161945837
Lamer_2006
2006-10-27 14:43
2007.11.04
Шо не так?


2-1192164282
Kolan
2007-10-12 08:44
2007.11.04
Как сделать так, чтобы в Edit вводились только латинские символы?


15-1190728528
начинающий
2007-09-25 17:55
2007.11.04
Vista на С:, ХР на D:





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский