Есть ViewModelCollection, в которую прилетают логи, а потом отображаются во вью.
Логи нужны все, удалять ничего во время работы приложения, нельзя. Но появилась проблема - через минут 20, логов уже около ста тысяч и оперативки -700мб.
Можно ли как-то "сжать" все это дело?
Скидывать логи сначала на диск, а потом кусками вычитывать и отображать.
В памяти держать только некоторый адекватный кусок, чтобы успеть подгрузить следующую пачку, пока пользователь скроллит.
INTERNALINTERFERENCE, храни их в базе данных, выбор которой в зависимости от того что хранить и какие запросы нужно делать.
Например в одном месте у меня логи складываются в файлы по времени (имя файла - модуль от деления времени логируемого события на константу - какой интервал времени хранится в одном файле), сериализация текстовая, построчная, timestamp первым числом в строке, вторым - тип данных (остальная часть строки - json), если нужна по ним фильтрация. Такой файл легко прочитать, легко хранить сжатым, в т.ч. средствами файловой системы, легко фильтровать по времени и типу (числа и строки, разделенные пробелом десериализуются очень быстро) а всю базу логов легко обслуживать (например можно хранить отдельно старые и новые данные, и удалять старее некоторой даты)
недостаток - операция записи в файл не атомарны, при многозадачной записи либо городить файловые локи либо центральный сервис, либо разделять потоки по отдельным файлам
храни их в базе данных, выбор которой в зависимости от того что хранить и какие запросы нужно делать.
Тк это логи и они будут отображаться последовательно - можно тупо номера строк / сдвиг держать.
Ему же не поиск нужен.
недостаток - операция записи в файл не атомарны, при многозадачной записи либо городить файловые локи либо центральный сервис, либо разделять потоки по отдельным файлам
Это уже давно решено во всех логирующих библиотеках - логированием действительно занимается один сервис - идёт накопление данных, а потом пачкой запись.