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

Вниз

Скорость удаления данных из памяти   Найти похожие ветки 

 
lookin ©   (2007-09-29 22:15) [0]

Вот интересно, у классов (как минимум, у одного типа класса, TChartSeries) эта скорость ниже, чем у рекордов (опять же как минимум, у одного типа, в самых общих чертах подобного TChartSeries). За счет чего?


 
Суслик ©   (2007-09-29 22:16) [1]

Ты бы код привел. Я, признаться, не очень понимаю, что есть удаление данных из памяти в общем случае.


 
TUser ©   (2007-09-29 22:17) [2]

Естествено, Free выполняется модленнее, чем Dispose, так как во Free записано много кода, а Dispose просто сообщает, что некая часть памяти свободна.


 
Однокамушкин   (2007-09-29 22:28) [3]


> TUser ©   (29.09.07 22:17) [2]

Вообще-то Dispose ещё иногда Finalize вызывает, а в структуре могут сидеть всякие вариантные массивы или интерфейсы, так что ещё неизвестно, кто в общем случае дольше провозится


 
Суслик ©   (2007-09-29 22:33) [4]


>
> Однокамушкин   (29.09.07 22:28) [3]
>
> > TUser ©   (29.09.07 22:17) [2]
>
> Вообще-то Dispose ещё иногда Finalize вызывает

примерно тоже самое делается и при деструкции класса.


 
lookin ©   (2007-09-29 22:47) [5]

> [4] Суслик ©   (29.09.07 22:33)

Пример кода приводить сложно, лучше я попробую на словах. Раньше я имел массив серий TChartSeries (точнее TLineSeries, но это не принципиально), в которые загружался файл данных. И вот появился у меня файл со, скажем, тысячами серий. При закрытии оного долго ждать приходилось. Поменял на рекорды, поскольку мне от серий нужно то и было лишь массивы значений и параметры линии и маркеров. Закрываться стало мгновенно... Вот собственно и пример...


 
Суслик ©   (2007-09-29 22:52) [6]

ну шо есть "закрывать массив".

масси=TObjectList? или што?


 
lookin ©   (2007-09-29 23:20) [7]

> [6] Суслик ©   (29.09.07 22:52)

>>шо есть "закрывать массив".

Удалять из памяти, ибо динамические...


 
Суслик ©   (2007-09-29 23:20) [8]


> Удалять из памяти, ибо динамические...

т.е. деструкторы не вызываются?


 
lookin ©   (2007-09-29 23:27) [9]

> [8] Суслик ©   (29.09.07 23:20)

В последнем случае нет, просто nil...


 
Суслик ©   (2007-09-29 23:33) [10]

шо есть nil,
лана, от тебя не добъешься ситуации


 
lookin ©   (2007-09-29 23:37) [11]

> [10] Суслик ©   (29.09.07 23:33)

Ну что же, может и так...


 
TStas ©   (2007-09-30 03:08) [12]

>lookin Если вопрос о том, что быстрее Dispose или Free, то на него ответили уже, притом разщвернуто даже.


 
lookin ©   (2007-09-30 05:37) [13]

> [12] TStas ©   (30.09.07 03:08)

Нет, вопрос звучал не так...


 
KSergey ©   (2007-09-30 10:26) [14]

> lookin ©   (30.09.07 05:37) [13]
> Нет, вопрос звучал не так...

По ветке складывается впечатление, что ответ на вопрос слабо интересует автора.

Если массив структур я себе однозначно представляю (я чего-то не знаю?), то что есть "массив классов"? И как именно он уничтожается?


 
tesseract ©   (2007-09-30 17:45) [15]


> И как именно он уничтожается?


И какая "наследственность" у классов ? И какой менеджер памяти используеться ?


 
lookin ©   (2007-10-01 10:08) [16]

>> KSergey ©   (30.09.07 10:26)
Интересует меня ответ, но просто не всегда я могу понять, что меня спрашивают...

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

type TCollectionItem = class
      Series: array of TLineSeries;
      ...
      constructor Create;
      destructor Destroy;
    end;

Скажем, у меня 10 таких TCollectionItemов. Посмотрите, там есть массив серий TLineSeries. И то, и другое создается динамически. И удаляется из памяти (или как это называется корректно) тоже динамически. Для серий - Free, для массивов - nil. Вот что написано в деструкторе TCollectionItem по этому поводу:

 for i:=Length(Series)-1 downto 0 do Series[i].Free;
 Series:=nil;

Такая конструкция меня устраивала полностью, пока в моих итемах не стали появляться сотни или тысячи серий. Только тогда и стала заметной скорость "удаления данных из памяти". Я все поменял на рекорды:

type TCollectionSeries = record
      .....
      XValues,YValues: TDoubleArray;
    end;

И деструктор поменял на:

 for i:=Length(Series)-1 downto 0 do
 begin
   Series[i].XValues:=nil;
   Series[i].YValues:=nil;
 end;
 Series:=nil;

Скорость "удаления" таких данных "из памяти" возросла до небес. Мой вопрос звучал так, что по сути провоцирует существенную задержку "стирания" данных при реализации первого способа структуризации данных?

Что касается практики, меня сейчас второй способ устраивает полностью, вот почему я не тереблю народ в поисках ответа - меня ответ интересует лишь теоретически... Но все равно заранее спасибо.


 
alex_*** ©   (2007-10-01 13:01) [17]

лично я не совсем понял что мы сравниваем. Разрушение объекта TLineSeries и TDoubleArray неизвестного типа? TDoubleArray тип с подсчетом ссылок? Если нет, то это утечка памяти. Может я уже отстал от жизни, ибо на дельфях уже давно не писал.


 
lookin ©   (2007-10-01 16:04) [18]

> [17] alex_*** ©   (01.10.07 13:01)

Да, прошу прощения, TDoubleArray всего лишь array of double...


 
alex_*** ©   (2007-10-01 17:31) [19]


> Да, прошу прощения, TDoubleArray всего лишь array of double.
> ..

тогда почему ты ему nil вместо Dispose даешь? Попробуй сериям Free не давать, для симметрии...


 
lookin ©   (2007-10-01 17:52) [20]

> [19] alex_*** ©   (01.10.07 17:31)

Вот что компилятор считает по этому поводу: Dispose not supported (nor necessary) for dynamic arrays


 
alex_*** ©   (2007-10-01 22:32) [21]


> Вот что компилятор считает по этому поводу: Dispose not
> supported (nor necessary) for dynamic arrays

Ну с компилером спорить не буду :) нет так нет. Дельфей под рукой нет чтобы медитировать над твоим кодом


 
KSergey ©   (2007-10-02 09:13) [22]

> alex_*** ©   (01.10.07 17:31) [19]
> > Да, прошу прощения, TDoubleArray всего лишь array of double.
> тогда почему ты ему nil вместо Dispose даешь?

Чиво??!
Не надо вводить людей в заблуждение. Все он тут правильно делает, кроме одного: это присваивание  nil можно убрать - все равно дельфи отследит, что на массив больше нет ссылок и корректно уничтожит его.


 
tesseract ©   (2007-10-02 10:20) [23]


> Dispose not supported (nor necessary) for dynamic arrays


Это если простые типы данных. Для объектов/строк и тд - придяться подиспозить. По крайней мере в D7 - В TD я только за глобальной памятью тщательно следил.


 
KSergey ©   (2007-10-02 10:26) [24]

Толком лично я по "огрубленному описанию" ничего не понял, но возникло такое предположение: в одном случае имеем тысячи объектиков, для каждого из которых вызываем Free, а в другом случае - массив структур размером в тысячи элементов. Очевидно, что один массив любого размера уничтожится несравнимо быстрее, чем тысяча экземпляров объекта.


 
KSergey ©   (2007-10-02 10:28) [25]

> KSergey ©   (02.10.07 10:26) [24]
>  в одном случае имеем тысячи объектиков,

Имелось в виду "тысячи экземпляров".


 
KSergey ©   (2007-10-02 10:29) [26]

> tesseract ©   (02.10.07 10:20) [23]
> Это если простые типы данных. Для объектов/строк и тд -
> придяться подиспозить.

Можно тут подробнее с примером: описание массива и его элементов где надо диспозить и где не обязательно.


 
tesseract ©   (2007-10-02 10:32) [27]


> Можно тут подробнее с примером: описание массива и его элементов
> где надо диспозить и где не обязательно.


F1 - Dispose - смотри описание для своей версии. Или просто отследи утёчку памяти - если её нет, то и забей.


> что один массив любого размера уничтожится несравнимо быстрее,
>  чем тысяча экземпляров объекта.


+ Контоль ссылок, ликвидация полей и тд.


 
7D14BC0E   (2007-10-07 22:10) [28]

Заструилась мелодия. Как бегущая река с ее всплесками и водоворотами. Потом замерла,
вдруг внезапно сменившись другой, печальной и замедленной, низкие звуки словно всплывали
из зеркально тихой, прозрачной глубины.


 
3F1E19D2   (2007-10-07 22:23) [29]

— Опять Россия — первая страна социализма. Именно она пошла великим путем по
лезвию бритвы между гангстеризующимся капитализмом, лжесоциализмом и всеми их
разновидностями. Русские решили, что лучше быть беднее, но подготовить общество с большей
заботой о людях и с большей справедливостью, искоренить условия и самое понятие
капиталистического успеха, искоренить всяческих владык, больших и малых, в политике,
науке, искусстве. Вот ключ, который привел наших предков к Эре Мирового Воссоединения.
Его мы не нашли на Тормансе, потому что здесь две тысячи лет спустя после ЭМВ еще
существует инферно, олигархия, создавшая утонченную систему угнетения. Для борьбы с этой
системой надо создать людей высокой психофизиологической тренировки, подобно нам,
безвредных в своем могуществе. И прежде всего научить их бороться со всепроникающей
«избранностью»— системой противопоставления владык и толпы, всеведущих ученых и
темных невежд, звезд и бесталанных, элиты и низшего, рабочего класса. В этой системе корень
фашизма и развращения людей Торманса…



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

Форум: "Прочее";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.044 c
15-1191397694
Реактор
2007-10-03 11:48
2007.11.04
Сохранение инфы с почтового сервера.


15-1191601160
Джо
2007-10-05 20:19
2007.11.04
Указатели на структуры как аргументы функций (C++)


2-1191954003
sdaf
2007-10-09 22:20
2007.11.04
IB


2-1191935983
Мурзик
2007-10-09 17:19
2007.11.04
Как убрать точку


11-1175322891
Trible
2007-03-31 10:34
2007.11.04
Содержимое RichEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский