|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyЕсть множество способов решить указанные проблемы, но ни один не имеет отношение к стилю кодирования (напомню тему топика). По этой причине я не собираюсь их обсуждать. Кроме того это просто неинтересно - все техники работы с разделяемыми ресурсами давно известны и тут нечего обсуждать. Вообще-то я просто считаю, что Вы сами привели пример, когда Ваш стиль либо заставляет писать абсолютно лишний код, либо провоцирует на ошибку при решении конкретной задачи. И все это навязанно именно стилем. В обратном Вы меня не убедили. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2007, 17:16 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Марк, в твоих рассуждениях мне видится вот какой недостаток - ты берёшь какие-то редкие (чтоб не сказать крайние) случаи, в которых таки да мой подход хуже, и проецируешь его на общие случаи. Например, если в скрипте требуется освобождать ресурсы, то, естественно, глупо копировать один и то-же фрагмент 20 раз - лучше сделать одну точку выхода, перед которой и освободить эти ресурсы (я ведь не написал, что набъю морду любому, кто использует единую точку выхода). Или другая ситуация (пример с ресурсами не очень характерен для ПБ, разве только если надо сделать несколько DESTROY-ев) - многочисленные места в скрипте, которые могут закончиться неуспешно - конечно, можно испльзовать икепшн хендлер или даже столь ненавистное "иди на..." (GOTO), но я бы сделал иначе: каждый раз, когда произошёл сбой, возвращать код сообщения об ошибке во внешнюю функцию, которая будет иметь следуюющий код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Таким образом будет достигнуто ещё одно преимущество - зёрна отделены от плевел, интересная бизнес-логика отделена от технического кода обработки ошибки. Насчёт SQL-ей: ты пишешь, что "плохой код" и "хороший код" придуцируют разные экзекьюшн планы, и надо смотреть конкретнмо какой более эффективный (я тебя правильно понял?). Да, такое может быть, и бывает, особенно если структуру базы данных ваял какой-нибудь... эээ... нехороший человек. И в таких особых случаях действительно надо думать как сделать лучше - мой вариант вполне может не подойти. Но чаще всего (из моего опыта) оба варианта идентичны. Как видишь, ты снова проецируешь особые случаи на общие. В садике нам рассказывали притчу о венике: когда прутики соединены между собой, сломать веник почти невозможно. Но если его развязать, то сломать прутики один за другим очень легко - вот моя мысль. Я так думаю, все участники дискуссии и без меня прекрасно это знают, а писАл я для особо у дарённых, чей код приходилось разгребать (ну, и совсем новичкам это должно быть тоже полезно). Кстати, спасибо Анаталию Московскому - отвечаешь за меня фактически так, как ответил бы я! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2007, 19:35 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
UrsegoТаким образом будет достигнуто ещё одно преимущество - зёрна отделены от плевел, интересная бизнес-логика отделена от технического кода обработки ошибки Ну а где те же тот же DESTROY писать? И write to error log лучше делать внутри функции. Лучше всегда делать как говорят в армии - безобразно, но однообразно, в конечном итоге это дает результат. UrsegoДа, такое может быть, и бывает, особенно если структуру базы данных ваял какой-нибудь... эээ... нехороший человек. И в таких особых случаях действительно надо думать как сделать лучше - мой вариант вполне может не подойти. Но чаще всего (из моего опыта) оба варианта идентичны.Из моего опыта - даже на запросах чуть сложней приведенного уже могут быть проблемы (На том же MS SQL). А уж когда какой-нибудь отчет напишут так раз в 5-6 завернув select'ы у меня обычно слов кроме матерных не бывает. Типа б$%*ь, какого х%$ агрегация 1000 строчек на 4-х процессорном серваке идет 10 секунд. И сиди переписывай такие творения. Но зато потом почему-то начинает летать. А уж то, что объявлено very good code на самом деле вообще wrong code само по себе. Ursegoа писАл я для особо ударённых, чей код приходилось разгребать (ну, и совсем новичкам это должно быть тоже полезно)Ну так поэтому и надо тогда особенно тщательно подходить к такому вопросу. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2007, 20:47 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Локшин МаркНу а где те же тот же DESTROY писать?В аппликации, над которой я сейчас работаю, вообще нет DESTROY-ев. Я сначала не врубился, говорю шефу - дык мемеори лик, блин, будет! А он ржёт - зачем, говорит, лишнее писАть, если гарбич коллектор запускается периодически? Блин, прям Джава какая-то... Локшин МаркИ write to error log лучше делать внутри функции. Лучше всегда делать как говорят в армии - безобразно , но однообразноЭта фраза всё ставит на свои места - наши мнения диаметрально противоположны. Можешь писАть безобразно, если хочешь - всё равно я с твоей аппликацией не буду работать. :-) Локшин Маркв конечном итоге это дает результат.Напиши вообще всю аппликацию в виде одной функции. Конечно, придётся изрядно помучиться и даже проклясть всё на свете, но в конечном итоге это даст результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2007, 00:33 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
UrsegoВ аппликации, над которой я сейчас работаю, вообще нет DESTROY-ев. Я сначала не врубился, говорю шефу - дык мемеори лик, блин, будет! А он ржёт - зачем, говорит, лишнее писАть, если гарбич коллектор запускается периодически? Блин, прям Джава какая-то... Так ты ему поясни что он козёл отмороженный... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2007, 00:37 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Ursego Локшин МаркИ write to error log лучше делать внутри функции. Лучше всегда делать как говорят в армии - безобразно , но однообразноЭта фраза всё ставит на свои места - наши мнения диаметрально противоположны. Смысл фразы не в том, что безобразно, а в том, что однообразно . Например однообразный интерфейс он может быть скучен, может быть как-то иначе можно было бы сделать чтобы как-то быстрее работать, но человеку будут более-менее понятны все принципы работы с формами, если он изучит работу с одной. И со стилем оформления точно также. Конечно, исключения допустимы, но они лишь, как известно, подтверждают правила. UrsegoМожешь писАть безобразно, если хочешь - всё равно я с твоей аппликацией не буду работать А это как жизнь еще повернется :) Ursegoно в конечном итоге это даст результат. Имелось ввиду что-то типа максимума результата при минимуме затрат. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2007, 15:42 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
ФиллипТак ты ему поясни что он козёл отмороженный... Не понял почему козел отмороженный? Ведь в PB на самом деле есть GC. Я вот тоже destroy не пользуюсь, т.к. если мне сказали что есть сборщик мусора, который уничтожает объекты, на которые нет ссылок, так я считаю, что следить за памятью не моя проблема, а проблема pbvm. Может просветите в чем проблема, почему необходимо уничтожать объекты, которые созданы руками? Думаю не только мне это будет интересно, еще народ есть, который не пользуется destroy (мой начальник тоже destroy не пользуется и меня так научил :-) ). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2008, 22:47 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
На кнопке висит код: Код: plaintext 1. 2. 3. 4.
Смотрю через TaskManager: приложение занимает 10MB, нажимаю кнопку - идет ретрив - использование памяти увеличивается на 80 MB, как только выходит из обработчика - память возвращается в исходное положение (10MB). Т.е. GC сработал и грохнул DataStore со всеми данными, т.е. память освободилась. (честно говоря проделал такую операция, как только первый раз сел за PB и мне сказали, что тут GC есть). К тому же есть большое финансовое приложение (пишем его 3 года), в котором нет ниодного destroy и ни разу не возникали проблемы с памятью: никаких утечек. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2008, 22:55 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Всё это верно. Но вот я привык за много лет дестроить всё, что накриэйтил, и чувствую себя неуютно полагаясь на GC (как было приказано начальством), хотя в современных языках вообще нету команды освобождения память. И это правильно - зачем отвлекаться на мелочи? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 00:06 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
интересноМожет просветите в чем проблема, почему необходимо уничтожать объекты, которые созданы руками? GC работает асинхронно. Поэтому возможны (и практически существуют) ситуации когда в цикле создаются объекты, а освобождение памяти происходит в конце цикла. При достаточно большом кол-ве итераций возникнет переполнение. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 10:56 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyGC работает асинхронно. Поэтому возможны (и практически существуют) ситуации когда в цикле создаются объекты, а освобождение памяти происходит в конце цикла. При достаточно большом кол-ве итераций возникнет переполнение. Причем на своем компьютере с 1 ГБ памяти это будет работать прекрасно, а у пользователя с 256 МБ программа будет падать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 11:08 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Я конечно понимаю, что можно привести массу конкретных примеров, где предпочтительнее явный destroy, я сам, разумеется, иногда использую destroy, особенно там, где это касается sharedobject. Но я всё-таки имею ввиду общие случаи. На счет цикла. GC работает ассинхронно, но у него есть некий период работы, и, мне кажется, что он успеет освободить память, до того как она кончится. (Контрпример в студию). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 11:27 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
интересноНа счет цикла. GC работает ассинхронно, но у него есть некий период работы, и, мне кажется, что он успеет освободить память, до того как она кончится. (Контрпример в студию). Вы думаете, а я с таким сталкивался. И то, я всегда пишу DESTROY, а тут забыл - и вылезло. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 11:37 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Локшин Марк wrote: > Причем на своем компьютере с 1 ГБ памяти это будет работать прекрасно Это самое главное . Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 11:52 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Хорошо, про цикл убедили. Тут я согласен, что предпочтительнее вызвать destroy. Но я всё-таки считаю, что в общем случае destroy не нужен. GC на то и сделан, чтобы снять с программиста задачу управления памяти, кроме этого destroy ведь несколько усложняет код, где есть несколько точек выхода. Например такой код мне нравится больше: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 11:57 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
интересно... кроме этого destroy ведь несколько усложняет код, где есть несколько точек выхода. ... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
------------ С уважением, IKAR IkarHomeCenter ........ Детский Дворик ........ ГавГав.Инфо Портал русскоязычной группы пользователей Sybase ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 12:03 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Вообщем меня никто не убедил, что всегда надо писать destroy. Мне кажется, что те, кто пишет destroy, просто привыкли следить за памятью, и пишут его на всякий пожарный. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 12:10 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Ikar Код: plaintext 1. 2. 3. 4. 5. 6.
ИМХО, после return не вызываются FINALLY ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 12:16 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Вызывается 100% ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 12:24 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky... ИМХО, после return не вызываются FINALLY На кнопку код: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 12:31 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
Ikar Anatoly Moskovsky... ИМХО, после return не вызываются FINALLY попробовать Верю, у меня наверно ложная память сработала :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 14:55 |
|
Праграмист, пешы красива!
|
|||
---|---|---|---|
#18+
интересноВообщем меня никто не убедил, что всегда надо писать destroy. Мне кажется, что те, кто пишет destroy, просто привыкли следить за памятью, и пишут его на всякий пожарный.DESTROY можно не использовать там, где он автоматом вызывается сразу в момент исчезновения последней ссылки на объект. Во всех случаях лучше использовать. Вообще-то все это пишется на автомате и подобных проблем не возникает. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2008, 15:02 |
|
|
start [/forum/topic.php?fid=15&gotonew=1&tid=1336340]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
12ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 208ms |
0 / 0 |