![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
---|Ветка была без названия|---
kserg@ukr.net © (2002-04-18 11:53:00)Привет всем.
Прошу, обясните мне в чём отличие 3-х нижеприведенных
способов обращения к полю и какой из способов более правильный
в плане экономии памяти
Query.Fieldbyname("Obozn").AsString
QueryObozn.AsString
Query["Obozn"]
Cпасибо.
IrenFD (2002-04-22 15:02:00) [1]1 вариант сам Borland считает почему-то устаревшим, и не рекомендует к использованию, хотя я бросаю на форму один компонент TQuery и потом динамически меняю текст запроса, при таком раскладе 2 вариант слишком трудоемок по сравнению с 1.
evgeg (2002-04-18 22:56:00) [2]Вариант 2 еще и обеспечивает контроль того, есть ли такое поле в наборе данных на этапе компиляции, а не выполнения, так же на этапе компиляции, а не выполнения контролируется тип поля. Он сымый быстрый, т. к. не тратится время на поиск поля в списке полей (а поиск этот осуществляется простым перебором).
kaif (2002-04-18 17:24:00) [3]А с точки зрения памяти - все это совершенно неважно, так как основную память жрет сам набор данных, а не объекты TField, и неважно как возникли их свойства, на стадии разработки или в run-time.
kaif (2002-04-18 17:19:00) [4]Если в программе много объектов полей, то persistent-поля (2) увеличивают размер хранимых ресурсов (dfm) в exe. Выигрыш по скорости по сравнению с 1 незначителен.
Скорее это вопрос удобства.
Раньше я придерживался варианта 2, теперь придерживаюсь варианта 1 (run-time поля), так как при изменении параметров поля в базе (например, ширины) или динамическом изменении текста запроса вариант 1 удобнее.
Однако во всех тек случаях, когда поля в базе стабильны и требуется дополнительное форматирование (DisplayFormat) или Align или русское название поля (DisplayLabel), предпочитаю использовать вариант 2.
Вариант 3 не использую вообще.
Anatoly Podgoretsky (2002-04-18 12:35:00) [5]Reindeer Moss Eater (18.04.02 12:16)
Тогда второй
kserg@ukr.net (2002-04-18 12:29:00) [6]>Val © (18.04.02 12:22)
>QueryObozn.AsString - для такого обращения к полю QueryObozn должно быть обьявлено в модуле, разве нет?
Понял - согласен.
Anatoly Podgoretsky (2002-04-18 12:27:00) [7]Reindeer Moss Eater (18.04.02 12:16)
Тогда второй
kserg@ukr.net (2002-04-18 12:24:00) [8]>Val © (18.04.02 12:22)
>QueryObozn.AsString - для такого обращения к полю QueryObozn должно быть обьявлено в модуле, разве нет?
Понял - согласен.
Val (2002-04-18 12:22:00) [9]QueryObozn.AsString - для такого обращения к полю QueryObozn должно быть обьявлено в модуле, разве нет?
Johnmen (2002-04-18 12:21:00) [10]Необходимо учитывать время на идентификацию поля и на преобразование типов.
1 вариант тратит время на идентификацию
3 вариант - на преобразование типа
2 наиболее оптимален по скорости, но не оптимален по удобоваримости :)
kserg@ukr.net (2002-04-18 12:17:00) [11]>Val © (18.04.02 12:13)
>Но оно должно быть статическим?
Недопонял?..
Обясни, плиз
Reindeer Moss Eater (2002-04-18 12:16:00) [12]>kserg@ukr.net
экономия памяти здесь при том, что именно она волновала автора вопроса
Val (2002-04-18 12:13:00) [13]Но оно должно быть статическим?
kserg@ukr.net (2002-04-18 12:12:00) [14]>Reindeer Moss Eater (18.04.02 12:08)
Причем здесь "экономия памяти", если такой вызов вощще "криво" работает ?
Поэтому, стараюсь избегать таких обращений
Reindeer Moss Eater (2002-04-18 12:11:00) [15]Во втором варианте поле не ищется в памяти
kserg@ukr.net (2002-04-18 12:09:00) [16]>Shaman_Naydak © (18.04.02 12:01)
А за счет чего появляется выигрыш в скорости ?
(у меня основная таблица содержит около 40полей)
Reindeer Moss Eater (2002-04-18 12:08:00) [17]>kserg@ukr.net
А к расходуемой памяти это какое отношение имеет?
kserg@ukr.net (2002-04-18 12:02:00) [18]>Reindeer Moss Eater
Не совсем согласен.
К примеру, из своего опыта я обнаружил, что если поле= NULL,
то обращение Query["Obozn"] вызывает исключение, а вот
Query.Fieldbyname("Obozn").AsString - нет.
Shaman_Naydak (2002-04-18 12:01:00) [19]По памяти - эквивалентные конструкции..
По скорости - второй вариант предпочтительнее (НО! выявить это можно только БОЛЬШОМ цикле(
GenBr (2002-04-18 12:00:00) [20]Только в последнем случае возвращается значение не типа String, a Variant