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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
         
Обсуждаем новые возможности и баги
 
Просьба писать про Embarcadero RAD Studio XE5, XE6, XE7, XE8, 10.x (Seattle, Berlin,Tokyo)
  По вопросам скачивания - Тема в Варезнике (lite-версии тут)
  Вопросы по неюникодным версиям Delphi — шестая бумага
  Бесплатные Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus
  Коммерческие компоненты и утилиты для Delphi/BCB
  Вопросы по компонентам для Delphi, C++ Builder разных версий
  Новые языковые возможности, начиная с Delphi 2005 по XE4 — здесь, и New!здесь еще
  Англоязычный официальный форум Embarcadero — здесь
  Embarcadero Quality Central, веб интерфейс — здесь, новый Quality Portal тут
  Программирование на Delphi — викиверситет
  Другие ресурсы
   Предыдущие бумаги
 
     Вопросы ..XE4       Вопросы ..XE3    Вопросы ..XE2      
  Вопросы ..2009-XE    Вопросы ..<2009 / ч.5    Вопросы ..<2009 / ч.4      
  Вопросы ..<2009 / ч.3    Вопросы ..Delphi 2 / ч.2    Вопросы ..Delphi  

  Выключение встроенного эксперта Castalia  для XE8 (иногда помогает при вылетах и тормозах)  
  Полезные плагины(эксперты)

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 15:25 11-09-2013 | Исправлено: Komandor, 15:49 31-03-2024
AlekXL



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

Цитата:
В D2010 повезло тем счастливчикам, которые с D7 ждали, когда можно будет увидеть нестандартную (не Ansi) букву в приложении.  

 
нестандартную букву можно увидеть и в классических Delphi, только это не так просто.
Я сам этим занимался, и небезуспешно.
Тем, кто "ждал" юникода аж до D2010, она не очень то поможет, поскольку из готового библиотечного кода приложение с полноценной поддержкой юникода все одно не построишь.
Есть суррогаты, есть диакритика, есть проблема с подходящими шрифтами и покрытием, есть проблема с поиском и сравнением строк, где эквивалентные FormD и FormC побайтово неравны.

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 13:20 09-01-2015 | Исправлено: AlekXL, 13:24 09-01-2015
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlekXL
Ой, да я тут со всем с Вами соглашусь.

Цитата:
полноценной поддержкой юникода все одно не построишь.

У меня то всё проще. Меня интересовало примерно Edit1.Text := WField.AsVariant. Я имею ввиду, что я нарочно, на имплицитных преобразованиях не потеряю букву если постараюсь. Тут ведь иногда я прямо со смеху падаю
Функция только для Delphi 2006

Код:
procedure GetFieldNamesList(Table: TDataSet; List: TStrings);
{$IFDEF COMPILER10}
var
  WL: TWideStrings;
{$ENDIF}
begin
{$IFDEF COMPILER10}
  WL := TWideStringList.Create;
  try
    Table.GetFieldNames(WL);
    List.Assign(WL);
  finally
    WL.Free;
  end;
{$ELSE}
  Table.GetFieldNames(List);
{$ENDIF}
end;

В 2006 GetFieldNames(List: TAnsiStrings - deprecated. То есть филды с именами WideString ещё создавать нельзя (да и где такие базы взять), а вот Ansi уже deprecated. )))))
 
 
Добавлено:
Кто не в курсе напоминаю. Так же на предыдущей странице:
тип TDataTime легко конвертируется в Double. По сути это один и тот же тип, поддерживающий ту же арифметику на уровне процессора. Так вот прикол - обратите внимание на четыре цифры перед точкой.    
42014 - это 10.01.2015  
42015 - это 11.01.2015  
Очень редчайшее совпадение. В ближайшие 300 лет не повторится. Бинарный Новый Год! Всех поздравляю заранее, не пропустите. Дату можно проверить следующим кодом:  
 
Showmessage(DateToStr(42014.0))

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 13:44 09-01-2015
kaz_av

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

Цитата:
 
ну прости, я то думал, что сравнение будет честным.  

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

Цитата:
твой изначальный код медленнее моего, на Delphi, за счет пересоздающихся StringBuilder'ов

Мой первоначальный оксидженовский код, будучи переписаным на использование статического стрингбилдера работает медленнее.
 

Цитата:
Я ограничил память и Delphi приложению

Ты её не ограничил, а дал столько, чтоб при таком количестве данных система тебя в своп не загнала. А вот потребность GC ты ограничил. Это читерство в чистом виде.
 

Цитата:
на личности переходишь?

Ты же перешел от любезностей к обвинениям, с чего мне себя сдерживать?
 

Цитата:
1) GC потребляет доли процента процессорного времени, тогда как легко может 50 или более  

Ты перевираешь мои слова от невнимательности или просто очень хочется быть правым? Я-то написал:

Цитата:
Всё от ситуации зависит, когда я мониторил одну софтину там GC кушал сотые доли процента.

Если ты не понял, это совсем не означает, что GC всегда будет кушать сотые доли процента.
 

Цитата:
2) Java быстрее Delphi на строках, не упоминая, что Java имеет преимущество только при наличии двукраного объема памяти, и процессорного времени на работу сборщика  

Я ни разу не сказал, что GC не требователен к памяти. Речь была о скорости работы.
 

Цитата:
3) Что накладные расходы на подсчет ссылок велики, хотя расходы на GC могут быть на порядок, в 10 раз больше  

Эти выводы сделаны тобой из некорректных тестов. В нормальных условиях GC безусловно быстрей.
 

Цитата:
4) Что GC существенно оптимальнее по CPU кэшу, не упоминая, что сама работа GC забивает кэш служебными структурами сборщика  

Опять вранье. Я говорил, что "GC более cache friendly", ты мне приписываешь "существенно оптимальнее". С такими методами ведения дискуссий, проследуй-ка ты родной в пень, и захвати туда книжку рихтера по GC, авось поможет.
 

Цитата:
5) Что боятся проблем нативного кода, вроде порчи буферов памяти -- это нормально

И снова вранье. Я сказал, что порча буферов, да и не только буферов, это обычная ситуация для натива.
 
Итого, поздравляю вас, гражданин соврамши.
 
xpin2013

Цитата:
В каждом исходнике свой? А у меня их явно более двух сотен важных.  

Ну пусть бы даже и свой, в чем проблема? А зачем тебе в каждом исходнике дата? Ну и даже если она тебе действительно нужна, макросами VCS решить проблему куда проще.
 

Цитата:
В D2010 повезло тем счастливчикам, которые с D7 ждали, когда можно будет увидеть нестандартную (не Ansi) букву в приложении.

Это те кому не рассказали о TNT? Бедняги.
 

Цитата:
Им повезло, а вот Вам видимо не очень, думаю много сил ушло именно в правильный юникод.  

Так может все таки ошибаться компилятор, или божественность все же не отменяется?
 

Цитата:
А то что иконка в сишарпе, как единственный способ входа в программу сливается даже без единого экзепшена, то это не просто нормально, это даже хорошо - память не жрёт иконка.  

У тебя и в дельфях от твоего датавставлятеля, по твоим же словам, эксепшен вываливается при закрытии среды. Видимо в прокладке дело.

Всего записей: 439 | Зарегистр. 15-02-2006 | Отправлено: 15:06 09-01-2015
xpin2013



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

Цитата:
У тебя и в дельфях от твоего датавставлятеля, по твоим же словам, эксепшен вываливается при закрытии среды. Видимо в прокладке дело.

Дело в том что BorlandIDEServices - это переменная, стало быть её можно заменить, но чудо писаки - пользователи интерфейсов рождённых от IUnknown считаю что BorlandIDEServices никогда никто не меняет и если запросить тот же интерфейс то это будет тот же объект. Значит можно смело кешировать переменные, складывать эти интерфейсы IUnknown себе запазуху (И плевать на всех гуру которые пишут тонны книг и очень популярны).  
1) Добиться исправления этой ситуации невозможно.
2) Кто сказал что сторонний пакет компонентов не будет вести себя точно так же?
3) Мой перехватчик абсолютно точно считает количество какое должно быть на счётчике, когда выгужают мой пакет из памяти и я обязан вернуть родной BorlandIDEServices. Очень частенько ошибки не возникает, но при определённых событиях, нерадивые программисты кешируют интерфейсы в своих переменных и тогда из-за некорректной работы со счётчиком вылазит один чудо Exception не затраеный до сих пор.
4) Если бы всегда когда нужен интерфейс повторялся бы путь от BorlandIDEServices до исполнения и потом освобождение интерфейса, то всё было бы корректно, а Delphi давно был бы более развит чем Excel. Разработчики IDE, пользователи ToolsAPI даже не предполагают что объекта обрабатывающего интерфейс, который они хранят нет и в помине, его выгрузили с пакетом. Так программировать нельзя, разувать глаза надо на реадонли проперти или переменную, разница всё же есть, и не спроста. Так и подмывает посоветовать - не плохо бы видеть куда прёте.
5) Один экзепшен против полной свободы добраться во все участки Delphi даже те где не реализован ToolsAPI. Тут под силу гораздо больше чем умеют GExpert.
 
Давайте закроем, я про новый год хочу. Гостей только распугиваете. Прекращайте.
 
ps
Так что не в прокладке дело, мне лишни экзепшен нисколько не мешает, он уже родной. А вот отсутствие реально помогающих екзепшенов на стадии разработки сишарп мне совсем не нравится. Никакой GC не окупит и даже прелести языка.
 
Добавлено:
Ну и если Экзепшен при выходе, то это Delphi говорит мне до свидания или пока, зависит он настроения.
 
Добавлено:

Следующий точный Новый Год найден!!!!!!!!!!!!!
Это Datetime(122358) то есть 01.01.2235 год! Мой предыдущий расчёт вручную не учитывал совпадения цифр по середине. Следующий Новый Год будет ровно через 220-ть лет!

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 15:44 09-01-2015 | Исправлено: xpin2013, 15:46 09-01-2015
AlekXL



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

Цитата:
Я вообще не предлагал ни каких сравнений, я рассказал о случае из практики

да ну?

Цитата:
Лично наблюдал, как код на жабе делающий огромное количество операций со строками драл аналогичный дельфийский и плюсовый код. Для паритета и на дельфях и на плюсах пришлось пользоваться собственным аллокатором под задачу  

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

Цитата:
Мой первоначальный оксидженовский код, будучи переписаным на использование статического стрингбилдера работает медленнее

Думаю, ты сделал что-то неправильно. Ну или оксиджен тупит.  

Цитата:
Ты её не ограничил, а дал столько, чтоб при таком количестве данных система тебя в своп не загнала. А вот потребность GC ты ограничил. Это читерство в чистом виде.  

ничего не понял...  
Для Delphi это ограничение никак не сказывается: она и на 400 тысячах элементов не перекрывает в потреблении 400 метров.
Ну а своп  JVM ее бы только замедлил.
Я смоделировал ситуацию ограниченных ресурсов, потому что ресурсы всегда ограничены.
И показал, что когда масштаб задачи подбирается, хотя бы даже и не вплотную, к потолку ресурсов системы, JVM sucks, тупит и лагает.
Какое же это читерство?
 
Мои выкладки, в отличие от твоих "впечатлений" и  "случаев", объективны: я показал и превосходство JVM в одних случаях, и ее недостатки -- в других.  
И сделал взвешенный, беспристрастный вывод -- Java малопригодна для случаев, когда теоретический размер и сложность задачи близок к актуальному пределу железа.
 
Пять лет назад оптимисты сказали бы: "ну и что, железо удваивает мощность каждые два-три года". Сегодня -- мы уже знаем, что это не работает. Производительность на такт, на ватт, на гигабайт памяти -- снова приобретает значимость.  
 
И тут managed языкам приходится кисло.

Цитата:
Ты же перешел от любезностей к обвинениям, с чего мне себя сдерживать?  

между обвинениями и оскорблениями есть разница. Жаль, что ты этого не улавливаешь.
 
Я поначалу думал, что ты просто заблуждаешься, когда ставить вровень managed языки и натив. Тогда я потратил время(это вообще первое мое приложение под java, так что усилие было значительным), и написал тестовое приложение на Java, аналогичное твоему.
 Оптимизировал его: слачала ввел статический StringBuilder, а потом увеличил размер пула "молодых" объектов.  
Каждый из этих двух шагов дает практически двукраное ускорение.  Далее, провел исследование, достаточное, наверное, даже для статейки на хабре, выложил код. Показал силу и слабость JVM.  
 
И тут ты начинаешь лепить отмазки: мол, "я только говорил о скорости, а о памяти ничего не говорил"... Что якобы я поставил JVM в "невыгодные условия", хотя условия для JVM были равными или превосходили условия для Delphi.
 
То есть ты упорствуешь, и говоришь как фанатик или евангелист managed языков, который игнорирует все недостатки парадигмы, но выпячивает их преимущества.  
 
И это здесь, в ветке Delphi! Не в моих правилах такое терпеть.
 

Цитата:
Цитата:
Всё от ситуации зависит, когда я мониторил одну софтину там GC кушал сотые доли процента.
 
Если ты не понял, это совсем не означает, что GC всегда будет кушать сотые доли процента.  

Конечно, не всегда. Если уж подсчет ссылок съедает до 5 процентов, то что говорить о GC? А ведь ты назвал эти пять процентов "адовым замедлением". Блин, это ли не двойные стандарты?
 
Напротив, все твои последние высказывания о managed коде были в неестественно светлых тонах. Случай, когда GC потребляет доли процента процессорного времени --  не правило, а исключение. Случай, когда JVM быстрее Delphi работает со строками, тоже нетипичен и не применим к случаю, когда скорость важна, и работа со строками действительно должна вестись максимально быстро.  
 
А из твоих постов неокрепший ум мог сделать заключение, что managed код имеет лишь незначительные недостатки, обладая при этом огромными преимуществами.
 
 Повторюсь, не здесь, не в ветке Delphi,  не на моих глазах может это происходить без моей реакции.
 

Цитата:
Я ни разу не сказал, что GC не требователен к памяти. Речь была о скорости работы.  

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

Цитата:
Эти выводы сделаны тобой из некорректных тестов. В нормальных условиях GC безусловно быстрей.  

тест был предложен тобой. Я лишь оформил и формализивал его, чтобы он был репрезентативен. Тест не на сферическом железе в вакууме, а на железе, адекватном задаче.  
 
Твои же "нормальные условия" известны: почти двойное потребление памяти в managed коде, и значительная нагрузка на процессор в фоновом потоке. Однопоточная задача на минимум двухпоточном процессоре, чтобы обеспечить ресурсами сборщик мусора. Если бы ты был объективен, то сразу же упомянул это.

Цитата:
Опять вранье. Я говорил, что "GC более cache friendly", ты мне приписываешь "существенно оптимальнее".  
В чем же разница между "cache friendly" и "существенно оптимальнее"?
Если нет существенного прироста по кэшу, то зачем писать это "cache friendly"? Зачем это маркетинговый буллшит?

Цитата:
С такими методами ведения дискуссий, проследуй-ка ты родной в пень
все, кто читает это, видят и мои, и твои методы ведения дискуссии. Им судить. Это и есть моя цель. Не выиграть в споре, а внести полную ясность, без умолчаний, для чтобы читающие эту дискуссию могли составить свое суждение.
 

Цитата:
И снова вранье. Я сказал, что порча буферов, да и не только буферов, это обычная ситуация для натива.  
Это не так. Сложные, трудно диагностируемые ситуации, достаточно  редки.  
Другое дело, что новичка именно такие нечастые случаи  могут довести до отчаянья, да и опытный программист поимеет нехилый геморрой с ними.
 
Да, в нашем лесу встречаются волки. Да, новичок не сможет писать на нативном языке сложные программы, без помощи сеньора, пока сам пару-тройку лет не походит по этому лесу.
 
Managed код дает дает более быстрый старт. В этой роще безопаснее, но она невелика, она огорожена, и лут в ней только тот, что одобрен ее хозяевами.
 Дети, играйте в ней, но не смейте утверждать, что это и есть весь мир. Что в лес вообще не стоит выходить, потому что там волки и медведи с пустыми черными глазами. Подрастайте, и набирайтесь мужества.
 
Добавлено:
xpin2013

Цитата:
http://sourceforge.net/p/vdbi/home/Home/

хм, интересно.. Прежде не встречался.
Описание, на мой взгляд, довольно сумбурное, и непонятно, какова киллер-фича у этого проекта?
Вот я использую sqlite+mormot без DataSet обвязки. Думаю, это очень быстро, и при этом -- sqlite -- стандарт де-факто, а ориентация на SQL привносит возможможности масштабирования. А у вас что?
Я вижу, что в ваш проект вложены существенные усилия, но не понимаю, ради чего они..
 
Добавлено:
----
из-за тестов с явой я стал подозревать, что скорость работы любой, даже однопоточной Delphi программы, может быть увеличена за счет асинхронной работы с кучей.
Аллокацию  без ожидания в отдельном потоке реализовать сложно, но вот освобождение памяти, можно сделать отложенным. Когда исполняемый поток лишь вносит объект в список на удаление, а специальный, выделенный поток , освобождает память из списка..
Это ускорит каждую функцию, в которой есть переменные  управляемых типов, за счет экономии времени в эпилоге.  
Это снизит затраты на блокировки в основных, пользовательских исполняемых нитях, когда блокировка происходит по причине освобождения ресурсов.
Да и насчет аллокации: почему бы не держать, с десяток, а то и сотню преаллоцированных буферов различных размеров под распространенные типы.
 
 То есть в дополнение к уже существующему пулам small objects, добавить дежурный, либо даже ассоциированный с потоком пул,  пополняемый по мере нужды, хотя тут я не уверен, что это ускорит программу.

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 22:31 09-01-2015 | Исправлено: AlekXL, 22:44 09-01-2015
Alexey_Gawrilow



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Не, ну это же классика кун-фу:
 

Цитата:
Сначала ты не знаешь, что нельзя делать то-то
Потом знаешь, что нельзя делать то-то
Потом ты понимаешь, что иногда таки можно делать то-то
Ну а потом ты понимаешь, что помимо того-то существует еще шестьдесять шесть способов добиться желаемого, и все из них практически равноправны.  
Когда тебя спрашивают "как мне добиться желаемого", ты быстро перебираешь в уме эти шестьдесять шесть способов, прикидываешь то общее, что в них есть, вздыхаешь и говоришь: "вообще-то, главное — гармония."  
На вопрос обиженных учеников: "а как ее добиться?", ты говоришь: "никогда не делайте то-то".

Всего записей: 640 | Зарегистр. 08-09-2003 | Отправлено: 00:49 10-01-2015
kaz_av

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

Цитата:
Я смоделировал ситуацию ограниченных ресурсов, потому что ресурсы всегда ограничены.  

Да не смеши ты меня. Память нынче стоит, как говно. У моего шестилетнего компа её 8Gb, а на полуторагодичном смарте 2Gb. Про серверы, где работают по настоящему нагруженные приложения и говорить нечего.
 

Цитата:
Я показал, что такой случай не показателен для действительно критического к производительности приложения.  

Этот случай не показателен, фрагментация памяти не показательна... Это, как говорится, "Хоть ссы в глаза - всё божья роса".
 
В общем, я давно уже подвел итог:

Цитата:
Да вот хоть при сколь кратном, но если я жабе дам памяти и она сделает работу сильно быстрее, то дельфу хоть завали ресурсами, быстрее шевелиться она не сможет.

p.s. Бизнесу не интересны твои кульбиты с байтами, им нужно задачи решать. И у него есть деньги на память. За сим откланиваюсь. Приятных снов.

Всего записей: 439 | Зарегистр. 15-02-2006 | Отправлено: 00:50 10-01-2015 | Исправлено: kaz_av, 00:55 10-01-2015
AlekXL



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

Цитата:
Память нынче стоит, как говно. У моего шестилетнего компа её 8Gb


Цитата:
Бизнесу не интересны твои кульбиты с байтами, им нужно задачи решать

бизнес как раз тщательно подсчитывает все расходы, как я понимаю. Кое-где они не важны. Кое-где очень даже. Ведь речь не только о памяти, но и о процессорном времени.
А процессоры не очень дешевы, особенно серверные. Особенно если этого железа сотни или тысячи, все стоят денег, все потребляют дорогое электричество, ну а программисты относительно недороги.
Alexey_Gawrilow

Цитата:
Не, ну это же классика кун-фу:  

Глубокомысленные и абстрактные мудрости... глубокомысленны и абстрактны.
Я считаю, куда ценнее простые и конкретные идеи, способные стать откровением.

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 02:31 10-01-2015 | Исправлено: AlekXL, 02:33 10-01-2015
xpin2013



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

Цитата:
Лично наблюдал, как код на жабе делающий огромное количество операций со строками драл аналогичный дельфийский и плюсовый код.

Это ни о чём не говорит, мне например. Я наблюдал, как мой Delphi компонент TRefactor дерёт Delphi компонент TRegExspr который на встроенном ассемблере. У TRegExspr больше возможностей и больше вычислений, мне они были не нужны. В случае работы со строками нужно просто придерживаться одного единственного правила - самое тонкое место - это перераспределения памяти в случаях Add и S:=S+S;. Помогают Capacity, обратные циклы, отказ от TStrings, не копирование строки если можно запонить Offset и Length, потом соответственно пересчитать. То есть алгоритм на Delphi можно оптимизировать и на Delphi, без лишних перераспределений думаю будет драть и жабу.
 
AlekXL

Цитата:
хм, интересно.. Прежде не встречался.  Описание, на мой взгляд, довольно сумбурное, и непонятно, какова киллер-фича у этого проекта?  Вот я использую sqlite+mormot без DataSet обвязки. Думаю, это очень быстро, и при этом -- sqlite -- стандарт де-факто, а ориентация на SQL привносит возможможности масштабирования. А у вас что?  Я вижу, что в ваш проект вложены существенные усилия, но не понимаю, ради чего они..  

На счёт усилий - я их делал, когда было не лень. Это детище любви, а не пота и крови. Чаше всего я туда запихивал готовые, не меняющиеся куски из своих других проектов. Я бы не против хорошего описания, сам не силён - говорю же всё должно быть "полюбовно", то есть если не лень. Киллер-фича, не совсем понимаю, думаю их несколько. Попробую объяснить на пальцах:
1) Он нужен там где мне нужен клиентдатасет (это бывает не редко). Например у меня есть возможность забрать все данные из датасета присваиванием ссылки на внутренний массив потом отдать обратно. В этом режиме мы работаем так же как с датасетом, только нет ни единого вызова в модуль DB и далее. Мне надо было построить отчёт по менеджерам, когда SQL даёт мне три колонки - менеджер акция количество, надо было чтобы в шапке были имена менеджеров, то есть развернуть данные. В моём режиме при заполнении я могу динамически добавлять колонки, на эту задачу около 10 минут ушло, что бы я делал раньше не знаю.
2) Есть задачи, весьма специфичные, где мне это помогло. Например нужен был CD диск для тех кто не имеет хорошего интернета, чтобы дать полазить по огромному интернет порталу. Основное требование - чтобы не смогли тупым копированием слить огромную коллекцию картинок рисованных большим трудом в автокаде. Моя база шифрует в зависимости от пароля (в добавок её никто почти не знает, да и расширение другое). Чтобы пользователи не были в ступоре, пока я загружаю базу с CD - это 300 метров, я сделал прогресс бар загрузки. Плюсом я сделал хук файловой системы браузера, мои картинки браузер брал прямо из базы, минуя файловую систему (компонент для хука болтается в кодецентрал рядом с vdb).
3) У меня собственные индексы, которые я использовал в задаче Центрального Офиса, - это репликация нескольких баз. Базы могут бекапится  и ресториться, по этому целостность/синхронность данных не гарантирована. Репликатору понадобилось восемь ступеней анализа данных. Мои индексы прикручиваются локально - в приложнии на любой Датасет, чем я и воспользовался. Так вот восемь ступеней анализа с локейтами многие ко многим, когда не требовалось изменять данные, занял всего 3 секунды (это вместе с запросами к базам, но этот замер был локальный, все базы крутились локально).  
4) Это великолепное решение для больших объёмов - приложению требуется свыше 3х миллионов записей локально. Не часто бывает, но когда происходит, - память у меня есть, дома 8 гигов оператива, память есть, а решений нормальных нет. Дельфовый клиент датасет не выдерживает половины  данных. IBX и FibPlus не виноваты - отдают то что им вернул протокол - OutOfMemory. Зачем мне сторонний клиентдатасет, если мой умеет записывать в один файл несколько таблиц-датасетов со всеми связками и индексами? В демке LocalIndex таблица городов с координатами 3.5 миллионов записей. Найдите свой город, задайте 20-30 км квадрат, и посмотрите соседние населённые пункты, фильтрация такая же быстрая как у сервака FireBird по айдишнику.
5) Всё находится в одном файлике - vdb.pas, это правило проекта. Вам доступно под отладчиком посмотреть всё, как работает конвертация, как работает поиск по индексу, как работают форейны, дефаулт значения и прочая лабуда. Вся подноготная баз данных в одном файле под отладчиком. Все данные находятся в одном массиве Variant-ов (BLOB поля это ускоренные одномерные массивы байтов), это тоже доступно отладчиком для просмотра.
 
Чёто я много уже написал, не знаю что важно, много ещё могу вспомнить, я туда выложил свой плагин adh для вставки дат, он является вырезкой из другого популярного на кодецентрал проекта я его лет 10 назад там выкладывал, потом убил. В adh я убрал абсолютно всё лишнее, оставил 3 файла. adh не имеет особого отношения к vdb, кроме того, что он и там используется, мне просто лень выкладывать на рапидшаре, когда мне не жалко - пусть пользуются.
 
 
Добавлено:
AlekXL

Цитата:
Случай, когда JVM быстрее Delphi работает со строками, тоже нетипичен и не применим к случаю, когда скорость важна, и работа со строками действительно должна вестись максимально быстро.    


Цитата:
Ведь речь не только о памяти, но и о процессорном времени.  А процессоры не очень дешевы, особенно серверные. Особенно если этого железа сотни или тысячи, все стоят денег, все потребляют дорогое электричество, ну а программисты относительно недороги.  

Я всё в голову взять не могу на сколько серьёзно Вы лично воспринимаете этот спор. Открою одну тайну, у нас сервак раздаёт интернет и крутит веб службы на шарпе. Так как я знаком с шарпом, пробовал оптимизировать одну из них, работающую со строками. Она грузит 50% процессора сервера (то есть 2 ядра по 100%). Она не успевает отработать в тенении суток (24 часа), потом убивается без достигнутых результатов. Про автора, я слышал что он великолепный программист (конечно - знает шарп и как замылить мозг). Что он кодил я тупо оптимизировал, ну там было такое за что руки отрывать надо (например (важное - использовалось выражение LinQ - помоему так - отпадная фича шарпа) -  Count(где есть Str+ ' ' в строке)+Count(где есть ' '+Str+ ' ' в строке)+Count(где есть ' '+Str в строке), то есть в сумму ' '+Str+ ' ' входят естественно части Str+ ' ' и ' '+Str. Что даёт эта цифра, думаю не скажет даже Бог программирования). Служба стала занимать 8 часов ночного времени, но там был запрос Постгрессу, который превышал 30 минут и транзакция рубилась серваком. Тогда я бросил эту службу - проще переписать на Delphi, думаю результаты её работы достижимы в сроки 10 минут с использованием моей локальной индексации.  
 
Так что бросте спорить, уважаемый, с kaz_av. Думаю он мог бы написать и получше, но GC и весь перформенс вокруг интерпретируемых Фреймворков застилает глаза и работадателям, да и творцам кодерам на фремворках. Эти кодеры такое пишут, просто ужас. Я не имею ввиду тех кто пришёл туда, проведя долгие годы в нативе. Оппонента Вы не переспорите, а работодатели, пока только начинают осознавать ошибочность своих решений в сторону фремворков. Жаба нужна ВКонтакте, чтобы я в игрушки играл с друзьями.
 
Добавлено:






С Рождеством! И
С Наступающим Бинарным Новым Годом по программистскому стилю!
 
Напоминаю кто не в курсе.)))  
тип TDataTime легко конвертируется в Double. По сути это один и тот же тип, поддерживающий ту же арифметику на уровне процессора. Так вот прикол - обратите внимание на четыре цифры перед точкой.  
42014 - это 10.01.2015  
 42015 - это 11.01.2015  
Очень редчайшее совпадение. Дату можно проверить следующим кодом:  
 
Showmessage(DateToStr(42014.0))  
 
Следующий точный Новый Год найден!!!!!!!!!!!!! (расстояние от нового года не более десяти дней)
Это Datetime(122358) то есть 01.01.2235 год! Следующий Новый Год будет ровно через 220-ть лет!  
 
Отметьте программисты, такой случай очень редкий, как пролетающая комета, загадайте у феи ассемблера любое желание, всё сбудется!!!!!!!!!!!

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 13:08 10-01-2015 | Исправлено: xpin2013, 14:18 10-01-2015
yura371



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Таблица 1 состоит из двух полей: Поле1 и Поле2. Поле1 - пустое, Поле2-заполнено. Вопрос:
Почему после выполнения SQL-запроса "insert into "Таблица1" (Поле1) values ('Значение1')",
"Значение 1" добавляется в поле "Поле1" после последней записи в другом поле в этой же таблице, а не сразу же в первую строку поля?
 
Суть в картинке:
http://s020.radikal.ru/i702/1501/c2/4f85195a374f.png

Всего записей: 20 | Зарегистр. 10-02-2013 | Отправлено: 14:57 10-01-2015 | Исправлено: yura371, 14:58 10-01-2015
ChSerg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yura371
Сортировку поставьте нужную у таблицы. Либо через order by, либо в гридине.

Всего записей: 936 | Зарегистр. 30-08-2001 | Отправлено: 15:15 10-01-2015 | Исправлено: ChSerg, 15:16 10-01-2015
regkz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yura371
для обновления, я так понял, именно это нужно, используется оператор Update

Всего записей: 1131 | Зарегистр. 16-01-2007 | Отправлено: 16:01 10-01-2015
landy



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

Цитата:
insert into "Таблица1" (Поле1) values ('Значение1')

Если ты хочешь добавить значение к уже существующей строке, нужно писать
 
update "Таблица1" set Поле1 = Поле1 + 'Значение1';
 
Если же ты хочешь универсальный оператор (делающий и вставку и обновление) - почитай про MERGE

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 17:57 10-01-2015
yura371



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
landy, почему то Ваш код заполняет все записи поля значением 'Значение1', а не одну строку?
 

Всего записей: 20 | Зарегистр. 10-02-2013 | Отправлено: 20:43 10-01-2015
ZloyBrawler



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

Цитата:
landy, почему то Ваш код заполняет все записи поля значением 'Значение1', а не одну строку?  

Ну может потому, что еще нужно добавить условие какие строки менять.
WHERE <условие>
 
курите http://msdn.microsoft.com/ru-ru/library/ms177523.aspx
 
UPDATE Person.vStateProvinceCountryRegion
SET CountryRegionName = 'United States of America'
WHERE CountryRegionName = 'United States';

Всего записей: 514 | Зарегистр. 19-10-2010 | Отправлено: 21:09 10-01-2015
yura371



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А как правильно записать данные в базу данных через SQLDataSet?
Я написал такой код:
Form3.SQLDataSet1.First;
Form3.SQLDataSet1.FieldByName('Поле1').AsString:='Значение1';
 
Но нет никаких результатов его выполнения. Также я добавлял вначале Form3.SQLDataSet1.Edit выходит ошибка: "SQLDataSet1: Can not modify a read-only dataset." Я также читал про связку DataSetProvider1 -> ClientDataSet1, но я не понимаю как это реализовать и настроить.

Всего записей: 20 | Зарегистр. 10-02-2013 | Отправлено: 21:16 10-01-2015
AlekXL



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

Цитата:
Я всё в голову взять не могу на сколько серьёзно Вы лично воспринимаете этот спор

Серьезно. Опытные и без меня все понимают, но я не хочу, чтобы даже здесь, нам некие типусы ездили по ушам новичков насчет чудес managed кода.
А дискуссия, считай, уже закончена. Считаю, по очкам я выиграл.
----
Друзья, я ищу контейнер -- неблокирующую FIFO  очередь, в которой есть  
TryPush(v):boolean
TryPop(out val):boolean
без ожидания.
 
В гугле нашлось flqueue но в ней нет защиты от переполнения, как и TryPush, TryPop
 
Еще нашлось wqueue, но там тоже нет TryPush, TryPop, а код ужасный.
 
Также в OtlContainers есть TOmniBaseQueue, в которой есть все, но она работает с OmniValue, а реализация выглядит мудрено.
 
Может, кто подскажет  реализацию получше?
 

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 21:23 10-01-2015
regkz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yura371
а может немного голову напрячь и решить самому свою лабу?

Всего записей: 1131 | Зарегистр. 16-01-2007 | Отправлено: 21:42 10-01-2015
AlekXL



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

Цитата:
а может немного голову напрячь и решить самому свою лабу?

а может, все таки помогать?
yura371
 
в справке прочти
There is no built-in editing support: you can only edit the data in an SQL dataset by explicitly creating an SQL UPDATE command or by connecting the dataset to a client dataset using a provider
 

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 22:26 10-01-2015
landy



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

Цитата:
Form3.SQLDataSet1.FieldByName('Поле1').AsString:='Значение1';  

Проще будет использовать объект TXXTable, чтобы была возможность сохранять изменения в базе.

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 22:38 10-01-2015 | Исправлено: landy, 22:38 10-01-2015
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Embarcadero RAD Studio


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru