Авторизация



Задай мне вопрос

Голосования

Вы любите, когда вам чешут спинку? ;)
 

ГлавнаяСтатьиC# → О вреде подробного логирования и немножко про мегаоптимизацию ;)
О вреде подробного логирования и немножко про мегаоптимизацию ;) E-mail
User Rating: / 0
PoorBest 
Written by xternalx   
Thursday, 03 June 2010 11:19

Некоторое время назад я задался вопросом немножко дописать программку для билетопечати. Точнее не дописать, а частично переписать. Причиной тому был топорный код, который был написан на скорую руку. Соответственно, ни о какой гибкости не могло быть и речи. Да, там можно было создавать неограниченное количество полей ввода, не больше. Я же хотел сделать так, чтобы помимо текстовых полей ввода можно было добавлять кастомную графику, ну и другие элементы управления. В принципе, у меня это получилось реализовать.

Проблема, с которой я столкнулся в дальнейшем заключалась в том, что при каждой последующей загрузки билета загрузка происходила все медленнее. Я начал копать, было подозрение что где то идет "утечка объектов", соответственнно, размеры коллекций возрастают, время на их проход увеличивается. Но это было неправда.

Вся проблема была в логах. У меня в программу встроена подсистема логирования, которая все очень подробно описывает. Почти в каждой функции что то выводится в лог. И чем больше лог становился - тем медленнее начинала работать и программа.

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

Как только я это реализовал, проблема с тормозами стала более не актуальна. Программа билетопечати работает очень шустро.


 

Comments  

 
0 # Hiders 2011-10-25 14:25
думаю нужно создать гибридный код и для Mac OS X
Reply | Reply with quote | Quote
 

Add comment


Security code
Refresh