Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по компонентам для Delphi, C++ Builder разных версий

Модерирует : ShIvADeSt

ShIvADeSt (26-06-2017 02:39): Продолжение тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=14667
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение раздела http://forum.ru-board.com/topic.cgi?forum=33&topic=6607&start=0  
Ссылки приветствуются.

См. также:

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 07:33 20-06-2007 | Исправлено: XPerformer, 14:41 24-10-2013
Alexey_Gawrilow



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Prot_XT

Цитата:
Господа, какой компонент наиболее быстрый и возможно более функциональный из разряда MemoryDataset? Кто вообще чем пользуется?

 
Может запоздало, но тебе все-таки зачем?
Ради DBAware контролов?
Или разные кортежи хранить?
 
Это к тому, что в крайних редакциях не актуально - там LiveBinding.
 
Раньше делал маппинг DTO на контроллы и их списков на Grid's/ListView/VirtualTreeView руками.
 
Во всех случаях используем RTTI или процедуры привязки.

Всего записей: 640 | Зарегистр. 08-09-2003 | Отправлено: 17:34 07-06-2014
dred2k



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexey_Gawrilow

Цитата:
FieldByName дает Exception.  
FindField дает результат, который нужно проверить


Цитата:
Если в продакш, под большую нагрузку - упасть ничего не должно.

 
Каждый вызов удобен там, где он удобен. Как еще ?
И никакой связи между использованием методов, вызывающих Exception, и падениями приложений я не вижу. Сам практически везде использую именно исключения, считаю это удобным и эффективным механизмом. Успешно пашут сервера в режиме 24x7, другие приложения. Ну а в кривых руках в дельфе и оператор присваивания может Exception вызвать. Подход нужен. Как, в принципе, в любом деле...

Всего записей: 403 | Зарегистр. 15-02-2006 | Отправлено: 17:37 07-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Prot_XT

Цитата:
Кстати на официальном сайте kbmMemTable есть соответствующие тесты сравнения со своим продуктом.

оно конечно, хорошо, но производитель часто искусственно подбирает такие тесты, на которых его продукт выглядит лучше других.  
На мой взгляд, лучший тест - задача из жизни, реализованная на базе разных компонент. И то один тест ничего не решает
kbmMemTable использую много лет, тогда еще альтернатив не было (или я о них не знал), есть мелкие глюки, которые научился обходить, в принципе доволен.
О том, что у него версия от версии сильно отличается стабильностью, уже писали.
Последнее время перешел на мемтайбл от EhLib в основном из-за родной интеграции с гридом и рядом удобств предоставляемых из коробки.
 
Добавлено:
SQLMemTable кто-нибудь потестирует для кумплекту?

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 17:53 07-06-2014 | Исправлено: XPerformer, 17:54 07-06-2014
Alexey_Gawrilow



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dred2k

Цитата:
Каждый вызов удобен там, где он удобен. Как еще ?

Никак, сам сказал.
 

Цитата:
И никакой связи между использованием методов, вызывающих Exception, и падениями приложений я не вижу.

Готов согласится.
Если ты готов обработать это исключение.
 
На мой взгляд - читабельность кода.
Код, логика которого основана на исключениях читать сложнее.
 

Цитата:
считаю это удобным и эффективным механизмом

Зависит от...
Эффективным врядли.
Все таки они не для организации логики работы предназначены.
Это же исключительные ситуации.
 
По этому поводу немало копий сломано - это путь к холивару.
 
IMHO если имя поля приходит извне, параметром,
то проверить корректность вызова(возможность выполнения работы) следует ДО ее выполнения.
Против начать делать и упасть.
 
Исключение ломает нормальный ход выполнения.
Надо "скобки" закрывать, предсказания забывать.
 
Как катапультирование.

Всего записей: 640 | Зарегистр. 08-09-2003 | Отправлено: 18:45 07-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добавляю TSQLMemTable  
 
TClientDataset - (Midas.dll от Delphi XE2)    8986 ms  
   TVirtualTable 9.3.5 -     8612 ms        
   TdxMemTable -   9189  ms    
   TjvMemoryData - 808912  
   TAbsTable InMemory v7.20 - 45320 ms  
   TMemTableEh v6.3 - 15740  
   TkbmMemTable v7.15 - 9520 ms
   TSQLMemTable v9.00 - 12550

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 19:06 07-06-2014 | Исправлено: XPerformer, 19:07 07-06-2014
ant0ni02004

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Prot_XT
под катом - код проверки для TAdoDataset
под D2007 результаты следующие (core i3, 3.07 GHz):
ClientDataset 543164 ms
AdoDataset 32885 ms
#

Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 19:13 07-06-2014 | Исправлено: ant0ni02004, 19:14 07-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мои тестирования компонентов
http://yadi.sk/d/hryYATXWSbqkW
исходники и два бинарника с включенной и выключенной оптимизацией (XE2)
Почему-то с  включенной оптимизацией результаты немного хуже
Желающие могут перепроверить на своей машине
TAbsTable InMemory v7.20  
TMemTableEh v6.3  
TkbmMemTable v7.15  
TSQLMemTable v9.00

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 19:58 07-06-2014
dred2k



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexey_Gawrilow

Цитата:
Исключение ломает нормальный ход выполнения.

 
Это как посмотреть.
Мне,к примеру, удобна концепция обработки ошибок (и прикладных, и критических) на основе исключений. Исключение - лишь переход, можно сказать инструмент управления ходом выполнения. Как Exit, Break, Goto (прости, Господи ). Вместе с блоками try finally - мощнейший в целом инструмент.  
 
А так да, холиваром попахивает. В целом - каждому свое. Главное с умом.

Всего записей: 403 | Зарегистр. 15-02-2006 | Отправлено: 20:02 07-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Есть большая вероятность, что дело не совсем в "подкрутке мидаса". Ты в D7 какой менеджер памяти использовал ? Встроенный ? Если да - то попробуй все прогнать, используя FastMM (первым в юзес проекта, ну сам почитаешь...). Он стал деюре менеджером по умолчанию в дельфях

 
Это все не важно. Мы тестируем компоненты при прочих равных условиях.
В одной и той же среде под одним и тем менеджером памяти, одной версией делфи и в одном физическом окружении. Результаты отличаются в 4-5 раз у одних компонент (ожидаемо), и в 100 раз у других (неприемлемо).
Мы все очень рады, что разработчики delphi заметили преимущества third-party менеджера памяти и сделали его с определенной версии стандартом.  
Однако если компоненты хорошо написаны, то менеджер памяти им не помеха (как показали летные испытания).
 
Добавлено:
Кто может рассказать в чем разница между EasyTable и Accuracer? они от одного производителя
Когда-то пробовал EasyTable - медленная, ощутимо на глаз
Accuracer даже и смотреть не стал. Начинаю подозревать что зря, в виду результатов теста SQLMemTable

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 20:12 07-06-2014
alekc2008



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
http://www.silverpointdevelopment.com/sptbxlib/index.htm

Всего записей: 236 | Зарегистр. 14-05-2007 | Отправлено: 00:00 08-06-2014
Erazor84



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alekc2008
Это что и зачем?

Всего записей: 368 | Зарегистр. 22-01-2008 | Отправлено: 01:30 08-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скачал вышеупомянутый тест
Убрал DBISAM, так как его у меня нет
Добавил MemTableEh, AbsTable
 
Выделены 2-3 лучших результата по каждому тесту
MemTableEh тест "locate by FInteger" выполнить не смог (не нашел вообще), поэтому клеточки пустые
версии компонент и delphi теже естественно
Отож - аппенд это еще не всё

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 02:25 08-06-2014 | Исправлено: XPerformer, 02:28 08-06-2014
Prot_XT

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alexey_Gawrilow

Цитата:
Может запоздало, но тебе все-таки зачем?
Ради DBAware контролов?
Или разные кортежи хранить?  

 
Не совсем понял при чем здесь LiveBinding... ну может быть... новые версии особо не знаю, потому как я до сих пор основной проект который обслуживаю пишу на Delphi 7. Там у меня помимо прочего GIS - система стоит и компоненты к семерке без исходников, которых уже и в природе не существует и конторы той тоже, что написала их. Но они работают и замечательно, а я неплохо их освоил без справок и исходников, тем не менее. Так вот и сиджу...
 
А использую я MemoryDataset... ну грубо обясняя, в таких режимах работы, где можно обрабатывать данные всеми возможными способами и в очень сложных связках... а потом когда надо - нажать кнопочку "ПРИМЕНИТЬ" -и записать это дело... или "ОТМЕНИТЬ". Опять же скорость работы... ну сам видите. миллион записей воткнуть за 5-7 секунд... это ж пипец.
Конечно существую и другие способы реализации, но мне нравится именно этот. Создал свои формы, к ним датасеты... а потом создаю их когда надо - а потом уничтожаю.
 
Добавлено:
Кстати... из DB-Control-ов испоьзую токма GRrid... причем cxGrid.

Всего записей: 163 | Зарегистр. 04-04-2003 | Отправлено: 06:19 08-06-2014
Kmich



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPerformer
выложите exe вашего последнего бенчмарка, где есть кнопка testAll.
 
Добавьте еще размер использованной памяти  различными компонентами, было бы интересно посмотреть кто сколь отъедает.

Всего записей: 192 | Зарегистр. 21-01-2005 | Отправлено: 11:28 08-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kmich

Цитата:
Добавьте еще размер использованной памяти  различными компонентами, было бы интересно посмотреть кто сколь отъедает.

мне тоже интересно, но не знаю грамотную методику как это сделать. Расскажите?
 
Добавлено:
 
А вот как выглядит наш тест по версии 2 если в нем append заменить на Insert.
В основном цифры те же - кроме ClientDataset, который теперь справился гораздо хуже
и MemTableEh - который я просто снес через 20 минут, не дождавшись результата

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 11:39 08-06-2014 | Исправлено: XPerformer, 11:54 08-06-2014
dred2k



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Prot_XT

Цитата:
А использую я MemoryDataset... ну грубо обясняя, в таких режимах работы, где можно обрабатывать данные всеми возможными способами и в очень сложных связках... а потом когда надо - нажать кнопочку "ПРИМЕНИТЬ" -и записать это дело... или "ОТМЕНИТЬ".

 
Полноценные транзакции полноценного сервера БД - не удобнее ? Сервер можно и "с собой таскать", Firebird Embedded, к примеру. Кроме того, для реализации "применить-отменить" есть довольно удобный механизм CachedUpdates.  
Это в плане "если что", как говорится...

Всего записей: 403 | Зарегистр. 15-02-2006 | Отправлено: 14:50 08-06-2014 | Исправлено: dred2k, 14:53 08-06-2014
Prot_XT

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Есть много чего... каждый "готовит" по своему...

Всего записей: 163 | Зарегистр. 04-04-2003 | Отправлено: 16:27 08-06-2014
Samotek

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Prot_XT

Цитата:
Есть много чего... каждый "готовит" по своему...

Это значит пользователь работает 2 минуты, пять, десять, пол дня к примеру потом форс мажор и вся работа коту под-хвост? Если, конечно, у тебя не предусмотрено промежуточное хранение(что дополнительный гемор при изменении структуры база). Мне, имхо, не нравятся такие технологии. У меня, к примеру, каждая запись в накладной, заказе - отдельная транзакция. Хотя, конечно, не претендую...  
 

Всего записей: 2448 | Зарегистр. 18-05-2005 | Отправлено: 16:40 08-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще один тест - включен dxMemData версия 2013.2.5, тест на 100 тыс записей, 10 тыс и 1 тысяча.
Выделены три лучших результата по каждому тесту
     
MemTableEh можно признать несостоятельным - на 100 000 записях мало того, что конца теста дождаться невозможно, еще и неспособен найти с помощью Locate число, которое заведомо есть в таблице.
Впереди планеты всей kbmMemTable - не только самый быстрый, но и предоставляет  богатый функционал - sql, версионность, поддержка нескольких курсоров, транзакции, сжатие данных в памяти и пр., полная совместимость с TDataSet.
Хорошие результаты показал SQlMemTable -  преимуществом является то, что можно бесплатно использовать. Поддержка SQL, многопоточности, компрессия BLOB-полей
dxMemData - быстрый, но тяжело устанавливать (много зависимостей от других пакетов DevExpress) и несовместим с TDataSet, собственно, название на это как-бы намекает: dxMemData а не dxMemTable.
ClientDataSet подтвердил свою репутацию тугодума
AbsTable In memory - входит в тройку лидеров.
TjvMemoryData - не рассматривался, т.к. на операции Append дает скорость в 100 раз хуже, чем у всех конкурентов
TVirtualTable  - не рассматривался, т.к. нет индексов
 
Добавлено:
Исходники и бинарник
http://yadi.sk/d/HEzv3Fr8SigkS

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 00:07 09-06-2014 | Исправлено: XPerformer, 13:59 09-06-2014
dred2k



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPerformer

Цитата:
dxMemData - быстрый, но тяжело устанавливать (много зависимостей от других пакетов DevExpress) и несовместим с TDataSet, собственно, название на это как-бы намекает: dxMemData а не dxMemTable.  

 
Мда, как говорится, настало время умопомрачительных историй...
Если про "тяжесть" установки еще можно понять - вдруг кому-то крайне тяжело воспользоваться гуишным инсталлом и нажать несколько кнопок, то про "несовместимость с TDataSet" - это откровенная дезинформация.
 
dxmdaset.pas

Код:
 
type
  TdxCustomMemData = class(TDataSet)
...
  TdxMemData = class(TdxCustomMemData)  
...
 

Как видим, полная несовместимость с TDatSet на лицо...
 
Действительно, TdxMemData довольно "тяжел", поскольку даже при выборе только его в установке, он подтягивает всю основную часть Devxpress. Так что использовать "только его" я бы и сам не советовал. Но вот для пользователей DevExpress - вариант удобный, благо с большинством основных требуемых операций он великолепно справляется (создается удобно - я про заполнение структуры, можно заполнить данные в редакторе формы - для справочников самое то, шустрые локэйты, фильтрация несколько громоздка - но зато гибка и вариативна, сортировка, правда, несколько неудобная, да и по нескольким полям он как бы не умеет, так что не без недостатков). Плюс лицензионная чистота (для абонентов DevExpress), не нужно платить за kbmMemTable и прочее, что порой очень важно.

Всего записей: 403 | Зарегистр. 15-02-2006 | Отправлено: 07:32 09-06-2014 | Исправлено: dred2k, 07:35 09-06-2014
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по компонентам для Delphi, C++ Builder разных версий
ShIvADeSt (26-06-2017 02:39): Продолжение тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=14667


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru