Войти
ФлеймФорумПрограммирование

Иона учиться программировать... логгер [C#]

Страницы: 1 2 3 4 5 Следующая »
#0
(Правка: 1:10) 1:06, 13 фев. 2019

Здравствуйте, мальчики :)
Последние пол года учусь программировать на C# (по книжке "C# 5.0 для чайников", если вдруг важно), основная мотивация - интересны компьютеры и игры (занималась даже модингом некоторых, пока училась в школе), хочется написать свой простенький 2D-платформер, который и решила уже начать делать, потому что надоело изучать программирование "в стол", на относительно простых примерах, и захотелось поставить себе большую, может и не очень выполнимую по итогу, но все же задачу, в процессе выполнения которой рассчитываю получить более значимый опыт. И как маленький шаг к своему платформеру, решила начать с написания класса для логирования :)
Но, так как самообучаюсь одна, понимаю что мне не хватает критики со стороны, ну или проще говоря code review, чтоб лучше учиться.
Поэтому подумала, может если тут у кого-нибудь будет минута свободного времени, можете ли вы пожалуйста пробежаться взглядами по двум файликам ниже, и высказать критику по увиденному?
Если вдруг имеет значение, то мне в первую очередь интересны примерно такие виды критики:
1. Это хрень и так не делается, лучше так...
2. Это медленно, быстрее и оптимальнее будет так... (все-таки, логгер - вещь в коде часто используемая, и хотелось бы чтобы он оказывал минимальное влияние на производительность)
3. В новом C# (сейчас, вроде как, самая свежая версия 7.3, а я не знала, что учу уже неактуальную версию, поэтому хотелось бы заодно подтянуть знания и по новым версиям на реальных примерах [с моим кодом например]) это можно сделать лучше / по другому, и будет это вот так...

Собственно, сами файлики:

+ Logger.cs
+ Logger.Exception.cs

Спасибо за ваше время


#1
1:14, 13 фев. 2019

  А не многовато ли кода?

#2
1:14, 13 фев. 2019

Иона
> занималась даже модингом некоторых
Вот лучше в этом направлении развиваться. Серьезно, лет 10 назад я за неделю делал карты для варкрафта 3 в которые было весело играть, а теперь месяцами пилю движок, а все так и начиналось с самописного вектора и класса для логирования...

#3
(Правка: 1:17) 1:15, 13 фев. 2019

/A\
> а все так и начиналось с самописного вектора и класса для логирования...
> а теперь месяцами пилю движок
  Тоже также длинно писал?

#4
1:20, 13 фев. 2019

nerengd
> оже также длинно писал?
примерно так

#5
1:24, 13 фев. 2019

/A\
> примерно так
  Может вопрос покажется тебе глупым, но для чего это все нужно?

#6
(Правка: 1:26) 1:26, 13 фев. 2019

Свято место пусто не бывает.

Подготовить Тараса к запуску

#7
1:28, 13 фев. 2019

Иона
Что касается разработки, то в идеале делать так:
1. пишешь юниттесты, чтоб убедиться что все работает как надо и чтоб последующие изменения ничего не сломали.
2. запускаешь статичный анализатор, например бесплатную версию PVS-studio, сразу получишь кодеревью.
3. запускаешь профайлер и смотришь чтоб новый код не занимал слишком много времени цпу.

Но обысчно к такой практике приходят спустя много лет...

#8
1:29, 13 фев. 2019

nerengd
> Может вопрос покажется тебе глупым, но для чего это все нужно?
ну так чтоб был разноцветный лог в хтмл и чтоб разные потоки обозначались разным цветом))

#9
1:51, 13 фев. 2019

nerengd
>А не многовато ли кода?
Та вроде как нет. Ничего лишнего же там, не? :)
Да и класс-то это такой, один раз хорошо написать его, и потом забыть. А помогать в процессе будет постоянно :)

/A\
>> занималась даже модингом некоторых
>Вот лучше в этом направлении развиваться.
Не, мне именно программирование интересно. В идеале хотелось бы заниматься программированием графики по итогу, интересно как это всё работает. Программировать геймплей мне кажется чуть более нудным :)
Вообще, модинг начинала осваивать тоже с редактора Варкрафта 3го, а потом Н-ое время спустя продолжила ковыряние уже в редакторе CryEngine'а, в редактор SpellForce 3'го так же заглядывала (интересно устроен, почти Microsoft Word 2013 :D).
К слову, по поводу твоего логгера, увидела там пару интересных идей, которые были бы полезны и для моего :)
В частности то, что у тебя там называется cached. По сути, append к строке. Может быть удобно в случаях типа "Loading... done", тоже надо бы добавить. И spoiler тоже интересно - у меня нечто подобное, но называется inlined (и спрятано во всплывающий tooltip при наводке мышкой).
А можешь пожалуйста выложить сюда ссылочку на пример твоего лога? Со всеми плюшками типа cached и spoiler, интересно посмотреть какой он у тебя по итогу с точки зрения юзера.
У меня такой, если вдруг тоже интересно:

+ Показать

nerengd
>Может вопрос покажется тебе глупым, но для чего это все нужно?
С моей точки зрения: удобство для realtime отладки и протоколирования хода работы, когда дебаггер по тем или иным причинам не применим.

/A\
>1. пишешь юниттесты, чтоб убедиться что все работает как надо и чтоб последующие изменения ничего не сломали.
Пока не получается себя к ним приучить.

>2. запускаешь статичный анализатор
>3. запускаешь профайлер
Пользуюсь пока встроенными в VS2017, но в конкретном случае меня более опытный, чем мой, человеческий глаз интересует :)

#10
1:55, 13 фев. 2019

/A\
> ну так чтоб был разноцветный лог в хтмл и чтоб разные потоки обозначались
> разным цветом))
  А я все считал что лог это просто файл .txt открытый куда пишешь строки
по мере выполнения программы..

#11
1:58, 13 фев. 2019

Если что, шарп я не очень знаю, но все-таки
- зачем var stringBuilder = new StringBuilder();, если в него записывается только одна строка. Кто мешает эту же строку и передать дальше?
- судя по блокировкам логгер предполагается использовать из нескольких потоков. Но тогда _curDeepLevel превратит вывод в кашу. А без него можно было бы вынести весь подготовительный код из блокировки и оставить в ней только запись в поток. А отступ я бы сделал зависящим от потока который пишет.
- с одной стороны вроде бы все операции записи в лог блокируют тред пока запись не закончится, а с другой - все равно на диск пишется раз в полсекунды. Если важна производительность - можно ничего не блокировать, пихать записи в ConcurrentQueue, а раз в полсекунды доставать их оттуда и писать в файл (ну, разве что блокировать тред когда в очереди скапливается слишком много). Если важно чтобы все записалось - надо делать flush после каждой записи.

#12
2:05, 13 фев. 2019

Иона
> А можешь пожалуйста выложить сюда ссылочку на пример твоего лога?
лог

#13
(Правка: 2:19) 2:05, 13 фев. 2019

Иона
> Да и класс-то это такой, один раз хорошо написать его, и потом забыть. А
> помогать в процессе будет постоянно :)
  Если другие классы будут такими же огромными, то когда ты планируешь
закончить свой движок?

Для примера мой лог:

+ Показать
#14
7:28, 13 фев. 2019

Арктик енджин уже на с# ?

Страницы: 1 2 3 4 5 Следующая »
ФлеймФорумПрограммирование