|
Оптимизация записи в лог.
|
|||
---|---|---|---|
#18+
Т.е. вот такой код, пинать не надо, наляпал в тест-проект. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Первая часть - чисто в тесте, чтоб сразу видеть в окне. Вторую часть запись в файл - штатно использую. Да переоткрываю, зато файл не "закусывается", когда инфы немного и растянута во времени, в самый раз. Процедура , проверка и при необх. корректировка параметров в реестре. Чисто API. Все подряд в лог не вывожу, только суть 3-4 строчки. Проверяю ~1000 параметров, ~ 3000+ строк в лог . Если не отключать вывод в текстбокс, 2,5 минуты, причем форма этак на 30% тупо может подвиснуть, из за чего процесс еще замедляется, хотя и не вылетает. Ну это ладно текстбокс в реале не нужен. Вывод только в файл 17-20 секунд. Отключить вывод в файл (вторую часть кода), как нажал на кнопку, так все уже готово (все 3000 операций). Т.е. сам полезный код отрабатывает считай мгновенно. Если стоит задача показывать юзеру прогресс, 15 сек самое оно, типа дела делаются, перделки свистят. Но если есть задача быстро в фоне сделать проверку-фикс, напр. при загрузке компа, когда и так все тормозит, эти 15 сек не есть гуд, а вот лог таки желателен. Как лог лучше писать? Не переоткрывать файл? Или еще что-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 21:42 |
|
Оптимизация записи в лог.
|
|||
---|---|---|---|
#18+
Дмитрий77, Лучше использовать логгер с более-менее стандартным настраиваем интерфейсом Nlog например ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 21:53 |
|
Оптимизация записи в лог.
|
|||
---|---|---|---|
#18+
Дмитрий77Как лог лучше писать? Не переоткрывать файл? Или еще что-то? StreamWriter внтури Dispose вызывает Flush. Вот и думайте. https://www.nuget.org/packages/log4net/ https://www.nuget.org/packages/NLog/ https://www.nuget.org/packages/serilog/ ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 22:57 |
|
Оптимизация записи в лог.
|
|||
---|---|---|---|
#18+
Ну вот попробовал. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Отрабатывает мгновенно. Видимо не тот случай, чтоб каждый раз переоткрывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 23:05 |
|
Оптимизация записи в лог.
|
|||
---|---|---|---|
#18+
В том же NLog'е у конфига есть настройка , указывающая, держать ли файл открытым. И еще куча настроек для тюнинга оптимизации записи в файл. Не лень изобретать велосипед? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 06:17 |
|
Оптимизация записи в лог.
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныВ том же 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 08:04 |
|
Оптимизация записи в лог.
|
|||
---|---|---|---|
#18+
+ за NLog ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 11:20 |
|
Оптимизация записи в лог.
|
|||
---|---|---|---|
#18+
Konst_One+ за NLogему нравится системное программирование. Вон, пусть табличку готовую библиотечную сделает. Все спасибо скажут. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 11:43 |
|
Оптимизация записи в лог.
|
|||
---|---|---|---|
#18+
Дмитрий77Как лог лучше писать? Не переоткрывать файл? Или еще что-то? 1. Лог пишется АСИНХРОННО по технологии, засунул сообщение в очередь, а оно уже там сбросится в файл, в базу, в сеть, ещё куда-нибудь. 2. Для лога НАДО использовать готовое решение 3. НЕ НУЖНО писать в лог самому через StreamWriter etc., если не собираешься написать своё собственное решение (нахрена только это надо??), потому что это не на час и не на день работы, люди годами точат сообществом либы. Взять можно либо NLog, либо Serilog из того, что лично могу посоветовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 12:01 |
|
Оптимизация записи в лог.
|
|||
---|---|---|---|
#18+
Мне кажется стоит исходить из интенсивности логирования. Если за 2 часа в лог записывает 2 строки и всё работает синхронно, то гемороить вот такое, не самая лучшая идея. Для этого хватит System.IO.File.AppendAllLines(string, string[]) Если в лог пишется туча строк и всё это происходит в многопоточной среде, типа ASP.NET сервиса, то тут без вариантов лучше брать NLog или подобные сборки, где уже всё готово. В этих библиотеках не шибко большой код и не такой уж и сложный если посмотреть, но зачем делать очередной велосипед, если есть уже готовый со всеми свистелками и перделками. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 15:16 |
|
Оптимизация записи в лог.
|
|||
---|---|---|---|
#18+
Roman Mejtes, ну в моем случае (куча действий сразу), думаю просто достаточно открыть файл один раз, а по окончании кучи действий его закрыть. Если за 2 часа 2 строки, да хоть бы и 20 строк в минуту (но не 3000 и сразу) то код в первом посте самое оно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 16:06 |
|
Оптимизация записи в лог.
|
|||
---|---|---|---|
#18+
Дмитрий77, Ты спросил как лучше делать - тебе ответили Дальше - решай сам ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 16:30 |
|
Оптимизация записи в лог.
|
|||
---|---|---|---|
#18+
Дмитрий77Roman Mejtes, ну в моем случае (куча действий сразу), думаю просто достаточно открыть файл один раз, а по окончании кучи действий его закрыть. Если за 2 часа 2 строки, да хоть бы и 20 строк в минуту (но не 3000 и сразу) то код в первом посте самое оно. * Если открыть файл и пытаться писать в него из разных потоков можно получить исключение. * Дескриптор файла может быть закрыт принудительно из вне * Существуют 1000 различных моментов, которые необходиму учитывать и обрабатывать, для примера: что делать, если закончилось место на диске? что делать, если размер файла превысил допустимый размер файловой системы? что делать, если файл внезапно закрылся? что делать, если файл повредился? что делать, если файл стал файлом для чтения? что делать, если кто то уже открыл файл на запись? что делать, если файл уже существует, но в другой, отличной от предпологаемой кодировки (и вопрос кодировок это вообще отдельная тема, так как ваша система может быть большой и разные её части могут работать в разных кодировках и даже на разных языках)? продолжать можно бесконечно, в NLog и прочих сборках все этих ЕСЛИ уже есть и их не нужно реализовывать. не стоит так же забывать, что запись в файл операция синхронная, при большой интенсивности записи у вас начнет проседать перфоманс, проблема будет даже не в том, чтоб записать информацию, а в том, чтоб дождаться возврата управления, в асинхронном варианте дожидаться не нужно, программа выполняет свою задачу дальше, а подсистема логирования уже сама решает когда и как сохранять эти логи. Лично я логи использую только когда это нужно тем, кто будет пользоваться программой и в логах хранится только та информация которая будет этим людям необходима для поиска и диагностики различных проблем. Всю информацию для отладки приложения вывожу в output через Debug.Print или Trace.WriteLine. Посмотреть в рабочем режиме её можно через DebugView А) людям использущим мою программу, весь этот ворох отладочный информации нафиге ненужен Б) Debug.Print будет исключен из кода в Release сборке при оптимизации Но в сборках логирования есть обычно уровень логирония, в котором можно определить, что логировать, а что нет, что тоже очень удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 16:46 |
|
|
start [/forum/topic.php?fid=20&msg=39624454&tid=1399436]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
88ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 299ms |
total: | 485ms |
0 / 0 |