|
6 / 6 / 1
Регистрация: 09.02.2016
Сообщений: 296
|
|
Запись логов в файл. Последствия для памяти04.11.2024, 22:06. Показов 5625. Ответов 65
Метки нет (Все метки)
Вечер добрый!
У меня давно есть некий код, который я использую для логгирования своих приложений. Суть его в том, что при инициализации логгера задается максимальное количество строк для файла и приложение передает в него по одной строке, которая добавляется в конец файла. Каждый раз при добавлении проверяется, превысили ли мы максимально допустимое количество строк и если да, то логгер удаляет самую верхнюю строку текстового файла и т.д. При добавлении каждой строки происходит процедура открытия и закрытия файла. Подскажите пожалуйста, есть ли принципиальная разница в том, оставлять файл открытым или открывать и закрывать его при каждом добавлении сроки? Интересуют нюансы работы с памятью, в частности, не происходит ли при открытии и закрытии записи какой-то инфы в файл, что при частых манипуляциях может затирать досмерти ячейки памяти и т.п. Всем спасибо за участие!
0
|
|
| 04.11.2024, 22:06 | |
|
Ответы с готовыми решениями:
65
Запись логов в файл SpringBoot и запись логов в файл. - не пишет |
|
|
|
| 06.11.2024, 05:54 | |
|
В utf8, utf16, utf32, какая разница?)))
Откуда у вас такое понимание странное? Есть источник? Добавлено через 2 минуты Seek установит курсор в произвольное место файла, а write запишет туда то, что сказано. Если текстовый или иной файл повредится, юзер сам дурак.
0
|
|
|
|
|
| 06.11.2024, 06:03 | |
|
Rius, это к порядку считывания. Как вы системе даете понять, что считывать надо с ЭТОГО места и до ЭТОГО, причем учитывая кодировки и прочую лабуду... ?
Как СИСТЕМА вставит в конец файла часть, не изучив перед этим где этот КОНЕЦ и как его интерпретировать? Добавлено через 2 минуты Rius, я не знаю как вписать данные в определенное место обычного файла. Если Вы знаете, то поделитесь секретом. Добавлено через 3 минуты Rius, напомню, что речь идет не за эвалуированные инструкции, а именно за внутренние механизмы, которые заснеженному взгляду не видны..
0
|
|
|
|
||||
| 06.11.2024, 06:11 | ||||
Остальное делает система. Понадобится считать блок - считает. Но не весь файл. Добавлено через 4 минуты
0
|
||||
|
|
||||||
| 06.11.2024, 06:15 | ||||||
|
Rius, ты не понял... Вы не поняли... (я путаюсь с ты/вы)
Допустим, есть файл:
Что сделает твой (тьфу, Ваш) механизм в этом случае? Добавлено через 1 минуту P.S. у меня есть ответ, но я хочу услышать мнения...
0
|
||||||
|
|
|
| 06.11.2024, 06:20 | |
|
А я не про изменение текста в середине текстового файла.
В этом случае вам придётся читать, да. Я про дозапись данных в конец файла. Запись логов это дозапись именно в конец. Предыдущее содержимое не важно. Добавлено через 3 минуты Вот про изменение текстовых файлов в середине: Добавление записи в XML-файл без его перезаписи
0
|
|
|
|
||
| 06.11.2024, 06:25 | ||
|
Добавлено через 2 минуты Rius, все это наводит на мысль, что система все же, скрывая от лишних глаз, "проигрывает" все это в своих внутренностях, прежде чем что-то куда-то записать...
0
|
||
|
|
|
| 06.11.2024, 06:31 | |
|
Вы говорите установить курсор в конец файла и записать массив байт.
Система ищет место в файловой системе и пишет туда. Если это середина блока, а не чисто новый, то считывает его и дополняет. Добавлено через 1 минуту Можете fatfs от Чана собрать в программе на C и посмотреть на работу внутренней кухни.
0
|
|
|
|
|
| 06.11.2024, 06:35 | |
|
В конец файла.... А где это конец, как его определяет система? Где его начало? Именно ЭТОГО участка памяти, который меня интересует.
Добавлено через 1 минуту Rius, ну, я размышляю от имени машины... как бы с ее точки зрения.
0
|
|
|
|
||||
| 06.11.2024, 06:47 | ||||
|
По общему спору, с тем что система просто выставляет указатель в конец файла и начитает шарашить туда байты: для 100% доказательства нужно на самом низком уровне отлавливать непосредственные обращения к диску и смотреть что там происходит. Подозреваю что там ворох оптимизаций и ньюансов для каждой "железяки" (виртуальные диски передают привет). Но как заметил выше Rius: - вроде как открытие файла и выставление указателя в конец одинаково быстро как для 1МБ, так и для 100ГБ. - дозапись любой кодировки не основывается на ранее записанных символах, а подразумевает тупо добавление новых блоков байт. Исходя из этого мне кажется что перезапись происходит не всего файла, а только его части. Если ещё точнее -- берется крайний кластер отвечающий за конец файла, в него дозаписывается сколько влезет, а дальше идет выделение новых кластеров (у нас же вроде обсуждается добавление в конец файла). Либо я не врубаюсь, и вы подразумеваете что "в рандомном месте поменяли 10 запятых на 5 точек, и пытаемся это адекватно сохранить". Тогда "да": потенциально перелопачивать весь файл, но как писал в самом начале -- таким лучше не страдать.
0
|
||||
|
|
||
| 06.11.2024, 06:57 | ||
|
В общем ответ: ничего страшного не должно происходить. На C# файл -- абстракция, причем лютейшая. Непосредственная перезапись ячейки на SSD произойдет через десяток посредников, начиная от внутреннего кода CLR и заканчивая контроллером железки. И так уж сложилось, что человечество заинтересовано в производительности всего этого зоопарка, и закладывает различные оптимизации прям на низком уровне, чтобы не страдали прикладные программы.
0
|
||
|
|
|
| 06.11.2024, 06:57 | |
|
Rius, Wolfdp, обыкновенный дискусс с умными людьми - это всегда интересно. Кто-то свою истину найдет. Простите меня, я немного отдыхаю (др у дочки), с пьяну завел диалог... Хотя, тема актуальная, все же. Я не верю в волшебные свойства виндовых ридеров - по любому захватывают дамп, чтобы что-то вписать.
Rius, Wolfdp, спасибо за диалог, добра вам!
0
|
|
|
6 / 6 / 1
Регистрация: 09.02.2016
Сообщений: 296
|
|
| 04.02.2025, 05:28 [ТС] | |
|
Возрождаю тему уточняющим вопросом)
Выше писали про то, что Append именно ДОБАВЛЯЕТ текст в конец файла. Но как именно происходит добавление? Например, я добавляю текстовому файлу в конец точку. Размер текста 6кб, размер кластера на диске 4кб, соответственно, размер файла 8кб. В таком случае дозаписывается только заданное количество байт или перезаписывается весь последний кластер? Вопрос возник глядя на БД, в которых данные могут добавляться сотни раз в секунду, при этом они не висят в оперативной памяти ожидая сохранения, а пишутся сразу на диск, и тем не менее ssd как-то вывозят по ресурсу.
0
|
|
|
|
||||
| 04.02.2025, 06:41 | ||||
|
Тем не менее, торренты не рекомендуется качать на SSD. А сам SSD - расходник, сдох - меняют.
0
|
||||
|
6 / 6 / 1
Регистрация: 09.02.2016
Сообщений: 296
|
||
| 04.02.2025, 12:16 [ТС] | ||
|
Rius,
0
|
||
|
|
|||
| 04.02.2025, 12:24 | |||
|
Память в SSD имеет очень ограниченное количество стираний, поэтому там вынужденно применяются алгоритмы Wear Leveling.
Также есть файловые системы, учитывающие низкий ресурс SSD.
2
|
|||
| 04.02.2025, 12:56 | ||
|
Не по теме:
вот не раз слышал об этом, но у меня на компе SSD (старенький кингстон SATA 500 гигов) уже живет около 10 лет. активно пользую, что-то удаляю, что-то устанавливаю и никак диск не помрет, а там еще виндовый файл подкачи и всякая виндовая закулисная деятельность, но две файловые помойки на HDD сдохли всего за 5 лет при менее активном использовании, вот такой парадокс, так что когда говорят про долговечность HDD мне кажется имеют ввиду сами диски, а механика и контролер там ломаются куда чаще, чем появляется много битых секторов
0
|
||
|
|
|
| 04.02.2025, 12:58 | |
|
Долговечность HDD в том, что количество перезаписей одного участка не ограничено (в сравнении с SSD).
А у SSD - 1000 стираний и всё, ячейка сдохла. Остальное, у кого сколько проработало, это сочетание качества, брака и удачи. Ну и условий эксплуатации.
1
|
|
| 04.02.2025, 12:58 | |
|
Запись логов в файл из службы Windows
Уровни логирования SpringBoot и запись логов в файл. - не пишет :( Запись "логов" в файл Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|