Авторизация
Задай мне вопрос
Голосования
| О вреде подробного логирования и немножко про мегаоптимизацию ;) |
|
| Written by xternalx | |
| Thursday, 03 June 2010 11:19 | |
|
Некоторое время назад я задался вопросом немножко дописать программку для билетопечати. Точнее не дописать, а частично переписать. Причиной тому был топорный код, который был написан на скорую руку. Соответственно, ни о какой гибкости не могло быть и речи. Да, там можно было создавать неограниченное количество полей ввода, не больше. Я же хотел сделать так, чтобы помимо текстовых полей ввода можно было добавлять кастомную графику, ну и другие элементы управления. В принципе, у меня это получилось реализовать. Проблема, с которой я столкнулся в дальнейшем заключалась в том, что при каждой последующей загрузки билета загрузка происходила все медленнее. Я начал копать, было подозрение что где то идет "утечка объектов", соответственнно, размеры коллекций возрастают, время на их проход увеличивается. Но это было неправда.Вся проблема была в логах. У меня в программу встроена подсистема логирования, которая все очень подробно описывает. Почти в каждой функции что то выводится в лог. И чем больше лог становился - тем медленнее начинала работать и программа. Для решения этой проблемы я пошел на хитрость. Когда окно лога скрыто, в него ничего не пишется. Т.е. все сообщения, которые должны там отображаться пишутся в памяти. Потом, когда пользователь открывает лог, эти данные скопом пишутся в окно лога. Далее, если закрыть окно лога, сделать еще какие либо действия, потом опять открыть, в лог добавятся только те строки, которые были добавлены с момента последнего закрытия окна лога. Как только я это реализовал, проблема с тормозами стала более не актуальна. Программа билетопечати работает очень шустро.
|

