powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Оптимизация записи в лог.
14 сообщений из 14, страница 1 из 1
Оптимизация записи в лог.
    #39624359
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. вот такой код, пинать не надо, наляпал в тест-проект.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  Public Sub AddLogRestore(ByVal str As String)
    If Form1.CheckBoxShowLog.Checked Then
      Form1.TextBoxDebug.Text = Form1.TextBoxDebug.Text & str & vbCrLf
      Form1.TextBoxDebug.SelectionStart = Strings.Len(Form1.TextBoxDebug.Text)
      Form1.TextBoxDebug.ScrollToCaret()
    End If
    Try
      Using file As System.IO.StreamWriter = _
       New System.IO.StreamWriter(IO.Path.Combine(path_AppData, "log\my_log.txt"), True, System.Text.Encoding.UTF8)
        file.WriteLine(str)
      End Using
    Catch
    End Try
  End Sub



Первая часть - чисто в тесте, чтоб сразу видеть в окне.

Вторую часть запись в файл - штатно использую. Да переоткрываю, зато файл не "закусывается", когда инфы немного и растянута во времени, в самый раз.

Процедура , проверка и при необх. корректировка параметров в реестре. Чисто API. Все подряд в лог не вывожу,
только суть 3-4 строчки.

Проверяю ~1000 параметров, ~ 3000+ строк в лог .
Если не отключать вывод в текстбокс, 2,5 минуты, причем форма этак на 30% тупо может подвиснуть, из за чего процесс еще замедляется, хотя и не вылетает.

Ну это ладно текстбокс в реале не нужен.

Вывод только в файл 17-20 секунд.

Отключить вывод в файл (вторую часть кода), как нажал на кнопку, так все уже готово (все 3000 операций).
Т.е. сам полезный код отрабатывает считай мгновенно.

Если стоит задача показывать юзеру прогресс, 15 сек самое оно, типа дела делаются, перделки свистят.
Но если есть задача быстро в фоне сделать проверку-фикс, напр. при загрузке компа, когда и так все тормозит, эти 15 сек не есть гуд, а вот лог таки желателен.

Как лог лучше писать? Не переоткрывать файл? Или еще что-то?
...
Рейтинг: 0 / 0
Оптимизация записи в лог.
    #39624363
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Лучше использовать логгер с более-менее стандартным настраиваем интерфейсом

Nlog например
...
Рейтинг: 0 / 0
Оптимизация записи в лог.
    #39624377
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Как лог лучше писать? Не переоткрывать файл? Или еще что-то?
StreamWriter внтури Dispose вызывает Flush. Вот и думайте.

https://www.nuget.org/packages/log4net/
https://www.nuget.org/packages/NLog/
https://www.nuget.org/packages/serilog/
...
Рейтинг: 0 / 0
Оптимизация записи в лог.
    #39624379
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот попробовал.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 Public the_file As System.IO.StreamWriter


  Public Sub AddLog(ByVal str As String)
    the_file.WriteLine(str)
  End Sub

...

  the_file = New System.IO.StreamWriter(IO.Path.Combine(path_AppData, "log\my_log.txt"))
   AddLog...
... много много раз


    the_file.Close()
    MsgBox("Finished!")



Отрабатывает мгновенно.
Видимо не тот случай, чтоб каждый раз переоткрывать.
...
Рейтинг: 0 / 0
Оптимизация записи в лог.
    #39624415
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том же NLog'е у конфига есть настройка , указывающая, держать ли файл открытым. И еще куча настроек для тюнинга оптимизации записи в файл. Не лень изобретать велосипед?
...
Рейтинг: 0 / 0
Оптимизация записи в лог.
    #39624454
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныВ том же NLog'е у конфига есть настройка , указывающая, держать ли файл открытым. И еще куча настроек для тюнинга оптимизации записи в файл. Не лень изобретать велосипед?

И не только в файл


NLog lets you write rules which control the flow of diagnostic traces from their sources to targets, which could be:

a file
text console
email message
database
another machine on the network (using TCP/UDP)
MSMQ-based message queue
Event Log
and others
...
Рейтинг: 0 / 0
Оптимизация записи в лог.
    #39624584
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+
за NLog
...
Рейтинг: 0 / 0
Оптимизация записи в лог.
    #39624622
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One+
за NLogему нравится системное программирование.
Вон, пусть табличку готовую библиотечную сделает. Все спасибо скажут.
...
Рейтинг: 0 / 0
Оптимизация записи в лог.
    #39624639
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Как лог лучше писать? Не переоткрывать файл? Или еще что-то?

1. Лог пишется АСИНХРОННО по технологии, засунул сообщение в очередь, а оно уже там сбросится в файл, в базу, в сеть, ещё куда-нибудь.
2. Для лога НАДО использовать готовое решение
3. НЕ НУЖНО писать в лог самому через StreamWriter etc., если не собираешься написать своё собственное решение (нахрена только это надо??), потому что это не на час и не на день работы, люди годами точат сообществом либы.

Взять можно либо NLog, либо Serilog из того, что лично могу посоветовать.
...
Рейтинг: 0 / 0
Оптимизация записи в лог.
    #39624934
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется стоит исходить из интенсивности логирования.
Если за 2 часа в лог записывает 2 строки и всё работает синхронно, то гемороить вот такое, не самая лучшая идея. Для этого хватит System.IO.File.AppendAllLines(string, string[])

Если в лог пишется туча строк и всё это происходит в многопоточной среде, типа ASP.NET сервиса, то тут без вариантов лучше брать NLog или подобные сборки, где уже всё готово. В этих библиотеках не шибко большой код и не такой уж и сложный если посмотреть, но зачем делать очередной велосипед, если есть уже готовый со всеми свистелками и перделками.
...
Рейтинг: 0 / 0
Оптимизация записи в лог.
    #39625017
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

ну в моем случае (куча действий сразу), думаю просто достаточно открыть файл один раз, а по окончании кучи действий его закрыть. Если за 2 часа 2 строки, да хоть бы и 20 строк в минуту (но не 3000 и сразу) то код в первом посте самое оно.
...
Рейтинг: 0 / 0
Оптимизация записи в лог.
    #39625043
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Ты спросил как лучше делать - тебе ответили

Дальше - решай сам
...
Рейтинг: 0 / 0
Оптимизация записи в лог.
    #39625064
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Roman Mejtes,

ну в моем случае (куча действий сразу), думаю просто достаточно открыть файл один раз, а по окончании кучи действий его закрыть. Если за 2 часа 2 строки, да хоть бы и 20 строк в минуту (но не 3000 и сразу) то код в первом посте самое оно.
* Если открыть файл и пытаться писать в него из разных потоков можно получить исключение.
* Дескриптор файла может быть закрыт принудительно из вне
* Существуют 1000 различных моментов, которые необходиму учитывать и обрабатывать, для примера:
что делать, если закончилось место на диске?
что делать, если размер файла превысил допустимый размер файловой системы?
что делать, если файл внезапно закрылся?
что делать, если файл повредился?
что делать, если файл стал файлом для чтения?
что делать, если кто то уже открыл файл на запись?
что делать, если файл уже существует, но в другой, отличной от предпологаемой кодировки (и вопрос кодировок это вообще отдельная тема, так как ваша система может быть большой и разные её части могут работать в разных кодировках и даже на разных языках)?

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

Лично я логи использую только когда это нужно тем, кто будет пользоваться программой и в логах хранится только та информация которая будет этим людям необходима для поиска и диагностики различных проблем.
Всю информацию для отладки приложения вывожу в output через Debug.Print или Trace.WriteLine. Посмотреть в рабочем режиме её можно через DebugView
А) людям использущим мою программу, весь этот ворох отладочный информации нафиге ненужен
Б) Debug.Print будет исключен из кода в Release сборке при оптимизации
Но в сборках логирования есть обычно уровень логирония, в котором можно определить, что логировать, а что нет, что тоже очень удобно.
...
Рейтинг: 0 / 0
Оптимизация записи в лог.
    #39625187
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesпродолжать можно бесконечно

Не тот случай :) у машины руль есть? колёса есть? какие ещё претензии к автовазу?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Оптимизация записи в лог.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]