|
|
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) Тут больше дело в проблемах возникающих в таком коде при сопровождении, человек примет это как данность, а не угрозу - размножит этот подход (а чёп нет, просто же?), код даже из этого примера легко разрастётся, могут проявиться другие исключения. Из-за такого вот упрощения поиск ошибки в коде может занять очень длительное время. Всегда лучше чётко описать конкретные исключения, отправив неизвестное гулять дальше - это не такая большая проблема. PS: если подцепить обработчик крашей вроде EurekaLog или Madshi, то сопровождение приложения заметно улучшится Это всё верно, но в данном случае - из пушки по воробьям. Вроде того Hello world MVC с листингом на три экрана. Но согласен, что такие допущения должны вноситься осознанно. Barmaley57 kealon(Ruslan) try ... finally/except не рекомендуется использовать в циклах, т.к. это не самый быстрый код (во всяком случае в x86) Нет, замерил специально, try секции замедляют почти в три раза. Ops/sec: 1716247 / 612494. Правда, значимой задержка начинает быть при кол-ве итераций от 150 млн. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 13:41 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
del, дубль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 13:42 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
Василий 2 Barmaley57 пропущено... ЕМНИП, тормоза будут только в случае исключительных ситуаций. Нет, замерил специально, try секции замедляют почти в три раза. Ops/sec: 1716247 / 612494. Правда, значимой задержка начинает быть при кол-ве итераций от 150 млн. В x86 обработка исключений никак не регулируется стандартом. для try-секции компилятор создаёт допкод, который записывает в стек инфу для восстановления - естественно это будет замедлять основной код В x64 допкод не создаётся, компилятор только добавляется раскрутку в блок данных программы, соответственно и try-блок не добавляет кода и не замедляет выполнение. Но это сильно затрудняет анализ, отсюда и обработка исключения в случае его появления будет медленее, чем на x86. Например, в питоне, особенно активно используются исключения для различных ветвлений, это давало довольно сильные тормоза для x64-билда. PS: всё вышесказанное относится к компиляции под винду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 17:36 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) alekcvp, по вашему посту подчёркнуто "Главное" - Не Главное, эксепшены группируются в список, это вполне нормальная ситуация для анализа ошибки - тынц Ага, цитата по вашей же ссылке:по-умолчанию, вложенные исключения не запоминаются. Чтобы сохранить вложенное исключение, вам нужно возбудить его через Exception.RaiseOuterException (стиль Delphi) или Exception.ThrowOuterException (стиль C++ Builder). Это как с трассировкой стека: они сделали возможность , но если вам это надо, то реализацию пишите сами, ручками. Т.е. очевидно что по-умолчанию там ничего хорошего не получится. И кроме того, мы говорили о потоках , а в потоках за пределы Execute() никакие исключения выходить не должны, да?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 17:44 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
alekcvp Это как с трассировкой стека: они сделали возможность , но если вам это надо, то реализацию пишите сами, ручками. Т.е. очевидно что по-умолчанию там ничего хорошего не получится. И кроме того, мы говорили о потоках , а в потоках за пределы Execute() никакие исключения выходить не должны, да?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 18:04 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
alekcvp в потоках за пределы Execute() никакие исключения выходить не должны, да?.. Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 18:07 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ alekcvp в потоках за пределы Execute() никакие исключения выходить не должны, да?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 18:58 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
alekcvp, да, у них там косяк Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 19:10 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) alekcvp, да, у них там косяк и в этом обработчике исключение нельзя выпускать Сегодня нельзя в этом, завтра нельзя в другом, мораль: не хочешь проблем - не выпускай ни в каком :) Там в самом DoTerminate, вроде, ещё какая-то обработка исключений есть. Исходников просто сейчас нет под рукой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 21:56 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
alekcvp, нету там ничего для защиты Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2019, 10:02 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич Thread.FreeOnTerminate:=True; - тоже не делает поток nil. FreeOnTerminate имеет смысл использовать только если ты создал поток и отпустил его в свободное плавание. или в деструкторе потока сам озаботился очистить за собой единственную ссылку где-нить в списке потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2019, 13:35 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
Василий 2 Нет, замерил специально, try секции замедляют почти в три раза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2019, 14:19 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
Barmaley57 Василий 2 Нет, замерил специально, try секции замедляют почти в три раза. foo:=i :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2019, 18:56 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
Василий 2 foo:=i :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2019, 19:07 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
rgreat Василий 2 foo:=i :D То же самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2019, 19:45 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
Василий 2 rgreat пропущено... А если без отладчика и в release запустить? То же самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2019, 21:05 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
Barmaley57 Василий 2 пропущено... То же самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2019, 21:44 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
YuRock Barmaley57 пропущено... Значит там есть и except блок и finally. Только с except потеря - максимум 20% Вот странно: есть там есть неявный except, то почему не сделать конструкцию вида: try .. except ... finally ... end ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 10:13 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
alekcvp> почему не сделать конструкцию вида: try .. except ... finally ... end ? Насколько я помню, еще лет 15 назад был соотв. тикет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 10:45 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
alekcvp Вот странно: есть там есть неявный except, то почему не сделать конструкцию вида: try .. except ... finally ... end ? К тому же, в таком случае не совсем очевидно, что будет выполнено первым - except или finally. Тем более, что я бы, например, хотел бы, чтобы можно было регулировать последовательность: и так try ... except ... finally ... end и так try ... finally ... except ... end Но это приведет к ухудшению наглядности кода. Т.ч. лучше (для наглядности) вручную писать два блока, каких хочешь. Так код понятнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 13:30 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
YuRock К тому же, в таком случае не совсем очевидно, что будет выполнено первым - except или finally. Мне трудно судить, как там это видно с позиций новичка, но вроде вполне очевидно, что finally должен выполняться в финале, сиречь последним ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 14:37 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
YuRock alekcvp Вот странно: есть там есть неявный except, то почему не сделать конструкцию вида: try .. except ... finally ... end ? К тому же, в таком случае не совсем очевидно, что будет выполнено первым - except или finally. Тем более, что я бы, например, хотел бы, чтобы можно было регулировать последовательность: и так try ... except ... finally ... end и так try ... finally ... except ... end Но это приведет к ухудшению наглядности кода. Т.ч. лучше (для наглядности) вручную писать два блока, каких хочешь. Так код понятнее. Очень наглядно: Код: pascal 1. 2. 3. 4. 5. 6. По сравнению с: Код: pascal 1. 2. 3. 4. Последовательность очевидна: try ... except ... finally ... end , т.к. finally из самого названия следует выполняться последней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 14:38 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
alekcvp Последовательность очевидна: try ... except ... finally ... end , т.к. finally из самого названия следует выполняться последней. Ну хорошо, согласен. Еще один момент. Если в except произойдет еще одно исключение - я так понимаю, что finally всё равно должно выполниться, так все захотят 100%. Получается, для finally компилятору нужно будет сделать еще один неявный блок try ... except . В общем, все не так просто и очевидно, как кажется. В любом случае, мне - более наглядно так: Код: pascal 1. 2. 3. 4. 5. 6. или так: Код: pascal 1. 2. 3. 4. 5. 6. В зависимости от необходимости и ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 15:05 |
|
||
|
Много малых вопросов о работе с памятью при работе с динамическими массивами и классами.
|
|||
|---|---|---|---|
|
#18+
alekcvp YuRock пропущено... Если есть finally - значит есть и except, как минимум неявный. Вот странно: есть там есть неявный except, то почему не сделать конструкцию вида: try .. except ... finally ... end ? https://quality.embarcadero.com/browse/RSP-18291 Resolution: Won't Fix Marco Cantù with comment: We are keeping exception blocks as they have been. Works good enough. Ленивые гандоны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 15:11 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39895052&tid=2038666]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
130ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
89ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 490ms |

| 0 / 0 |
