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

Вниз

Как сделать аналог packed record только для классов.   Найти похожие ветки 

 
Тимохов   (2003-11-13 13:04) [0]

Судя по хелпу дельфи этого делать нельзя. Пока я делаю так, что заношу все свойства в packed record и в классе делаю одно свойство типа fProperties: TPropPackedRecord. С смысле экономии памяти очень помогает. Но! В смысле быстродействия стало хуже, при том такой же эффект наблюдается если снять packed с record"а.
Вопрос: с чем может быть связано ухудшение быстродействия в данном случае?


 
clickmaker   (2003-11-13 13:08) [1]

Процессор быстрей работает с данными, выравненными на границу 4 байта, т.е. родной размер для 32-битной архитектуры


 
Тимохов   (2003-11-13 13:10) [2]

Ну это то понятно. Я в конце вопроса поправился, что такой же эффет наблюдается если снять packed с записи. При этом, насколько я понимаю все внутри record выровнено по 4 байта. Или я ошибаюсь, внутри record без слова packed не обязано быть все выровнено?


 
clickmaker   (2003-11-13 13:14) [3]

Цитата из дельфового хелпа: "By default, the values in a structured type are aligned on word or double-word boundaries for faster access"


 
Тимохов   (2003-11-13 13:19) [4]

Про цитату понял, сам ее видел, вопрос про выравнивание записей задал с целью уточнения.

На самом деле исходный вопрос можно перефразировать так:
есль ли разница для дельфи в двух кодах:
(1)
TRec = record
name: string
end;
TClass1 = class
rec: trec;
end;

(2)
TClass2 = class
name: string;
end;

Если у кого достоверная информация о том, что вариант 1 ДОЛЖЕН работать медленне?


 
panov   (2003-11-13 14:42) [5]

А что, тому, что для работы с невыровненными по границе данными, процессору требуется дополнительное время на обработку, требует еще подтверждения?

А в твоем примере совершенно без разницы, определена строка внутри структуры или отдельно.


 
Тимохов   (2003-11-13 14:54) [6]

Понял.
Я вообще то тоже так думал, что разницы быть не должно (т.к. все вроде как должно быть выровнено), однако она есть.

Ладно пойду asm ботать - там всегда найдешь ответ.


 
PVOzerski   (2003-11-13 14:55) [7]

2[4]:
Разница-то огромная. Ваш TClass1 - неявный потомок tObject, а tObject содержит в себе не так уж мало методов. И создавать его надо динамически, причем с вызовом конструктора.


 
han_malign   (2003-11-13 16:07) [8]

> однако она есть.
- и как ты выяснил, интересно?


 
han_malign   (2003-11-13 16:10) [9]

> Судя по хелпу дельфи этого делать нельзя.
{$A-}
TClass2 = class
name: string;
end;
{$A+}


 
Тимохов   (2003-11-13 16:36) [10]

[8] Вообще говоря через засекание времени с одним и другим подходом. Разница есть, причем достаточно ощутимая. Структура данных очень большая - порядка 60 мегов. Работа с ней ведется достаточно плотная, причем с очень большим количеством доступов к переменным класса.

[9] Спасибо посмотрю... да, что-то я раньше пропустил мимо глаз "In the {$A1} or {$A-} state, fields are never aligned. All record and class structures are packed."


 
han_malign   (2003-11-13 16:51) [11]

> Структура данных очень большая - порядка 60 мегов
- а чего ж еще хотел - пропускную способность памяти, да и файл подкачки, еще ни кто не отменял, естественно, с packed быстрее работать будет. И "очень большое количество доступов к переменным класса" - здесь абсолютно не причем...

З.Ы. 60 мегов - это не структура - это поток, и работать с ним надо как с потоком. А потокам на выравнивание положить - хоть битовые поля заводи...


 
Erik   (2003-11-13 17:10) [12]

Возможно стоит пересмотреть метод работы с данными, если это какято структура то стоит использовать фаил или базу данных. Будет быстрее, чтоты сначала думается по другому. Или хотябы TFileStream использовать, а еще лучше использовать виртуальныю с траницу из файла подкачки на http://www.delphikingdom.com/ был пример.


 
Тимохов   (2003-11-13 17:20) [13]

2[12] Про файл подкачки спасибо.
Проблема в том, что на самом деле-то делаем то досаточно безобидную штуку - некий свой аналог qreport, только в чем-то куда более навернутый и мощный. Я бы сказал, что это похоже больше на word. На отчетах до 300 страниц (причем с большим количеством вложенных таблиц) все работает прекрасно - весь цикл до вывода в метафайлы занимает секунд 20, что даже для word неплохо. Хотелось бы, конечно, и большее кол-во страниц переваривать. Вот и ищем всякие пути оптимизации. Беда в том, что теперь каждый следующий шаг дается с большим трудом. Поэтому файл подкачки для такой штуки пока использовать не очень хочется. Но в дальнейшем, может быть, придется прибегнуть к ним.



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

Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
3-78811
Immortal_Death
2003-11-05 09:05
2003.11.24
Более быстрый алгоритм?


14-79176
Igor_thief
2003-10-28 17:43
2003.11.24
Графика


3-78778
Liavik
2003-11-05 17:20
2003.11.24
QuickRep


3-78849
VitGel
2003-11-03 18:45
2003.11.24
Оперативно-учетная...


6-79086
Шевченко Александр
2003-09-27 09:21
2003.11.24
Как програмно изменить настройки IP-адреса?





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