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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Prot_XT
Midas можно жестко вкомпилировать с помощью uses MidasLib
 
На моей машине результаты аналогичные (Midas от XE2)
1) 8986
2) 8612
3) 9189
4) - в процессе, но результат я думаю уже никому не интересен ) UPD: 808912

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

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

Цитата:
Midas можно жестко вкомпилировать с помощью uses MidasLib

Ну в таком случае сейчас скомпилирую и выложу реальный результат работы midas от Delphi 7

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Prot_XT
все-таки не очень справедливо -- у есть ClientDataset еще два поля FLOAT1 и FLOAT2. Они хоть и не заполняются, но память под них выделяется
 
Добавлено:
AbsTable InMemory дал 45320 ms
тоже можно сказать не выдержал конкуренции
 
Добавлено:
MemTableEh - 15740
 
---
Соединяю результаты на своей машине по 2-му варианту
TClientDataset - (Midas.dll от Delphi XE2)    8986 ms
 TVirtualTable -     8612 ms      
 TdxMemTable -   9189  ms  
 TjvMemoryData - 808912
 TAbsTable InMemory - 45320 ms
 TMemTableEh - 15740

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 22:38 06-06-2014 | Исправлено: XPerformer, 23:01 06-06-2014
Alexey_Gawrilow



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

Цитата:
В первом случае обращение шло по названию полей, во втором случае обращение было к Fields[0] поля по порядку. Прирост в скорости таким образом при использовании второй процедуры достигал почти 50%. Это так... на заметку программирующим... )))

 
http://delphi.about.com/od/database/ss/faster-fieldbyname-delphi-database.htm
http://www.delphitools.info/2010/11/30/fieldbyname-or-why-a-profiler-is-your-friend/
http://fgaillard.com/2010/11/fieldbyname-findfield-too-convenient-to-be-honest/
 
Это потому что мат-часть все-таки учить надо.
У меня если товарищЪ не обосновывает FieldByName супротив статических полей или FindField - собеседование не проходит.
 

Всего записей: 640 | Зарегистр. 08-09-2003 | Отправлено: 23:16 06-06-2014 | Исправлено: Alexey_Gawrilow, 23:17 06-06-2014
Prot_XT

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
[b]Alexey_Gawrilow[/b
]
Цитата:
Это потому что мат-часть все-таки учить надо.
У меня если товарищЪ не обосновывает FieldByName супротив статических полей или FindField - собеседование не проходит.  

 
Не особо понял к чему это... типа быстрее отрабатывает, потому, что я типа не знаю мат-часть... так что-ли? )))
 

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexey_Gawrilow
на работе часто пишите циклы по аппенду мильона записей?
4-5 сек против 8-9 сек в среднем. Итого на вставке одной записи секономили (внимание!) 5 сек делим на миллион это будет... я даже затрудняюсь сказать какая ошеломительная прибавка в скорости программы (такта 2 наверно)

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

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Я открою страшную тайну - я и раньше знал, что FieldByName работает медленно, решил здесь и протестировать на сколько... результаты налицо, как говорится.

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поскольку TVirtualTable показал наилучшую скорость в этом, пусть и несколько притянутом за уши тесте, решил использовать его в реальном проекте.
Сразу выяснилось, что нет индексов и нет метода Findkey.
ТО есть это не полноценный датасет.
В отличие от например TAbsTable, который не только датасет, но поддерживает SQL-запросы в полном объеме стандарта SQL-92  
или например TMemTableEh, который при использовании вместе с DBGridEh дает  возможность отображения в виде дерева. Встроенный фильтр в dbGridEh работает как в Excel и прочие плюшки в готовом виде.

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



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

Цитата:
В XE6 ее подкрутили и она стала работать на уровне конкурентов...

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

Код:
 
i7-3820, 3600 MHz
32G  (DDR3-2133)
OCZ-VERTEX4 256G
 
InMemoryDatasets.v1.0.exe:
- TClientDataSet = 6692 ms
- TVirtualTable = 6209 ms
- TdxMemData = 7550 ms
- TjvMemoryData = 300754 ms
 
InMemoryDatasets.v2.0.exe:
- TClientDataSet = 3837 ms
- TVirtualTable = 3401 ms
- TdxMemData = 3681 ms
- TjvMemoryData = 297884 ms
 

 
Добавлено:
Alexey_Gawrilow
Глубокая оптимизация - задача совершенно отдельная. Посмотрел бы я на постоянный кодинг, используя для "суперэффективности" десятки локальных переменных, массивов и т.п. Баланс производительности и простоты/наглядности нужен. В большинстве прикладных задач, конечно.
 

Цитата:
У меня если товарищЪ не обосновывает FieldByName супротив статических полей или FindField - собеседование не проходит.  

Насчет FindField это, верно, шутка ?
XE6:

Код:
 
function TDataSet.FieldByName(const FieldName: string): TField;
begin
  Result := FindField(FieldName);
  if Result = nil then DatabaseErrorFmt(SFieldNotFound, [FieldName], Self);
end;
 

Грозен ты на собеседованиях. Сам у себя можешь не пройти... ))

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

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

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

 
Нет, дело совсем не в этом... скомпилированны файлы на Delphi 7, однако на машине с семеркой TClientDataSet загибается напрочь и он самый медленный. А этот же файл на машине с XE6 рвет из под себя... ведь эта dll вроде зарегистрировна как com - сервер. Оттуда считаю и ноги... да...  
и я провел проверку, как мне посоветовали с компилированием технологии midas внутрь, то есть добавил uses MidasLib.
 
По сравнению с рабочим компом, где стоит Core i3-2130, на моем Core2Duo - E8400 - результат оказался ужасен - 1 021 463 ms - это что-то около 17 минут... вот такие дела...
 
Все выложенные ранее результаты сделаны на этом же компьютере. А был просто поражен этой медлительностью. И потом... разницы между первой и второй версией процедуры заполнения датасета - нет вообще!
 
Добавлено:
Желающие могут проверить скомпилированный файл c uses MidasLib на Delphi 7:
 
http://yadi.sk/d/gnPTWQz2SYsTa
 
Добавлено:
На более мощных машинах...

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



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
InMemoryDatasets.v3.0.exe:  
- TClientDataSet = 385323 ms  
- TVirtualTable = 6271 ms  
- TdxMemData = 7582 ms  
- TjvMemoryData = 300863 ms

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

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

Цитата:
InMemoryDatasets.v3.0.exe:  
- TClientDataSet = 385323 ms  
- TVirtualTable = 6271 ms  
- TdxMemData = 7582 ms  
- TjvMemoryData = 300863 ms  

 
Ну ..."шустренько" он у тебя... по сравнению с моей машинкой. )))[
 
XPerformer
q]Поскольку TVirtualTable показал наилучшую скорость в этом, пусть и несколько притянутом за уши тесте, решил использовать его в реальном проекте.
Сразу выяснилось, что нет индексов и нет метода Findkey.
ТО есть это не полноценный датасет.
В отличие от например TAbsTable, который не только датасет, но поддерживает SQL-запросы в полном объеме стандарта SQL-92  
или например TMemTableEh, который при использовании вместе с DBGridEh дает  возможность отображения в виде дерева. Встроенный фильтр в dbGridEh работает как в Excel и прочие плюшки в готовом виде.[/q]
 
А как на счет dxMemData с функционалом? Я как бы индексами не особо пользуюсь в inmemory. Да и потом судя по тестам стандартный DataSet от XE6 показывает весьма достойную производительность!
 

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



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Prot_XT
 
Ради интереса - попробуй в D7 подключить FastMM.
uses FastMM4 (первым модулем, в проекте).
http://sourceforge.net/projects/fastmm/?source=directory
 
Результаты могут быть интересными.

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

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Хорошо сделаю сегодня...
 
Добавлено:
Может быть еще какие-нибудь компоненты потестировать?
Или разнообразить выполнение тестов...
Я вот не понял режим работы SQLite в inmemory.. что за штука такая...
Ну а потом можно красочную статью написать с графиками...)))
Думаю почитать интересно будет.
 
Добавлено:

Цитата:
(первым модулем, в проекте)

А что есть разница каким по очереди модулем цеплять?

Всего записей: 163 | Зарегистр. 04-04-2003 | Отправлено: 09:40 07-06-2014
dred2k



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

Цитата:
А что есть разница каким по очереди модулем цеплять?

 
Конечно (секции инициализации стартуют в порядке подключения модулей). Внимательно почитай описание FastMM - там или док, или в комменте в самом модуле, я не помню. Тебе понравится, с ним еще и утечки удобно отслеживать, и подробную инфу по распределению памяти приложения получать...

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



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

Цитата:
А как на счет dxMemData с функционалом? Я как бы индексами не особо пользуюсь в inmemory. Да и потом судя по тестам стандартный DataSet от XE6 показывает весьма достойную производительность!

 
Я этим компонентом не пользуюсь, поэтому ничего не могу сказать, но как правило качество компонент от DevExpress хорошее.
Зачем нужны таблицы в памяти без сортировок и индексов? даже незнаю: ведь даже вывести списком в отчет клиент потребует в отсортированном виде.
А индексы нужны чтобы искать быстро по ключевому полю, а не методом полного перебора. Если надо рассчитать сложный сводный отчет - ну скажем, кто сколько какого товара купил в разрезе по месяцам, то без индексов будет 3 дня считать на большом объеме.
 
Добавлено:
Добавляю kbmMemTable (поддержка  SQL, индексов) - результаты на своей машине по 2-му варианту  
 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

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

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPerformer
Странно - у меня TClientDataSet по тесту Prot_XT показал чуть худшие результаты , чем TKbmMemTable 7.30 на XE6
ClientDataset - 12516 ms
KbmMemTable - 12250 ms

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Samotek
я запускал все тесты несколько раз - результаты колеблются
TkbmMemTable только 1 раз дал 8950, остальные 9300-10000 ms
TClientDataset - тоже иногда дает больше 10000
Так думаю примерно одно и то же
 
Данная методика тестирования несовершенна, это понятно
Но дает возможность тем не менее отсеять явных аутсайдеров
 
 
Добавлено:
тем более версии отличаются

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



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

Цитата:
Не особо понял к чему это

К тому, что внутри еще циклы.
 
и, как пример, варианта 2:
1) Создаем статические привязанные поля в DesignTime и обращаемся к ним

Код:
 
odsTableName: TOracleDataset;
odsTableNameID: TIntegerField;
odsTableNameValue: TStringField;
...
  odsTableName.Open;
  try
    while not odsTableName.EOF do begin
      Strings.AddObject(odsTableNameValue.AsString, TObject(odsTableNameID.AsInteger));
 
      odsTableName.Next;
    end;
  finally
    odsTableName.Close;
  end;
 

 
2) Выполняем привязку перед циклом

Код:
 
odsSelect: TOracleDataset;
...
var
  fID, fValue: TField;
begin
...
  odsSelect.SQL.Text := QueryTextGetByParams(....);
  odsSelect.Open;
  try
    fID := odsSelect.FindField(IdFieldName);
    fValue := odsSelect.FindField(ValueFieldName);
    Assert(Assigned(fID), '<guid>');
    Assert(Assigned(fIValue), '<guid>');
...
    while not odsSelect.EOF do begin
      Strings.AddObject(fValue.AsString, TObject(fID.AsInteger));
 
      odsSelect.Next;
    end;
  finally
    odsSelect.Close;
  end;
 

 
XPerformer

Цитата:
на работе часто пишите циклы по аппенду мильона записей?

Постоянно. Одна из специфик - ETL.
 
dred2k

Цитата:
Насчет FindField это, верно, шутка ?

Нет, не шутка.
 
FieldByName дает Exception.
FindField дает результат, который нужно проверить.
FindField вызвывается 1 раз, перед циклом.
 

Цитата:
десятки локальных переменных, массивов

Скорее класс маппинга.
 
Это когда нельзя использовать DirectPathLoader или ArrayInsert, речь об Oracle.
 
Всегда - выбор и обоснования.
DirectPathLoader дает максимально возможную скорость заливки, но обладает списком существенных ограничений.
ArrayInsert требует маппинга значений в массив.
Insert самый медленный, хинт /*+APPEND*/ увеличивает на проценты, тогда как ArrayInsert в разы.
 

Цитата:
Грозен ты на собеседованиях.

Ключевая фраза - не обосновывает.
Мне даже не важно, что отвечал, важно как.
Думает, документацию смотрит, исходники +
спрашивает на форуме -
спрашивает на форуме, потом думает, документацию смотрит, тесты пишет, как вот в этом треде +(+)
потому как
 

Цитата:
Глубокая оптимизация - задача совершенно отдельная

Это не про нее.
Речь о надежности.
Получил параметр, проверил, и в бой.
 
Если решение на пару запусков под контролем разработчика - разрешено все.
 
Если в продакш, под большую нагрузку - упасть ничего не должно.
 
И это.. это не АЭС.
Это просто деньги.
Условия контракта с клиентом, когда в требованиях от 9(девяток) рябит.
 
Как пример..из прошлого.. попробуйте записать ход технологического процесса - показания датчиков.
В аварийном режиме.
Для электрооборудования, например запротоколировать аварию на подстанции.
Там вообще про DB слой забыть приходится.
 
Как пример..из настоящего.. промышленная печать, онлайн сканирование, контроль дублей, отбраковка.
 

Цитата:
Зачем нужны таблицы в памяти без сортировок и индексов?

Например, при реализации DashBoard.
Потоки работают, кидают нотификации.
Минитор, записывает значения в таблицу-в-памяти.
Визуализируем через грид, в Quantum(DX), красивенький прогрессбар.
 
Добавлено:
XPerformer

Цитата:
4-5 сек против 8-9 сек в среднем...я даже затрудняюсь сказать какая ошеломительная прибавка в скорости программы (такта 2 наверно)

Кабы так - проблемы вообще нет.
А увеличение скорости заливки с часов до минут - того стоит.
 
Добавлено:
И да, я за правильный код.
Вернее не так.
Я за код, который работает правильно.
 
http://www.osnews.com/story/19266/WTFs_m
 
http://ru.wikipedia.org/wiki/%CC%E0%EA%EA%EE%ED%ED%E5%EB%EB,_%D1%F2%E8%E2
 
http://www.linux.org.ru/forum/talks/3282903
http://www.xakep.ru/post/46172/
 
http://avl2.info/index.php?option=com_content&view=article&id=166:97p93&catid=5:97thingsprogrammer&Itemid=8

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

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Кстати на официальном сайте kbmMemTable есть соответствующие тесты сравнения со своим продуктом. Вот такие критерии там рассматривают:
 
With indexes/Without indexes
Insert:        
Edit:              
Locate by ID:      
Locate by FInteger:  
Locate by FString:  
Delete:            
Append:        
Close:    
 
Мне было приятно узнать, что  kbmMemTable поддерживает SQL, присутствуют и индексы. Да и скорость работы по выложенным раннее XPerformer результатам весьма высокая.
Пожалуй чисто теоретически - это мой выбор. Скачаю - попробую его по эксплуатировать в своих проектах.
   

Всего записей: 163 | Зарегистр. 04-04-2003 | Отправлено: 16:13 07-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