soks
@soks

Оптимизация EventLog?

Всем привет!

Возникла проблема в оптимизации вычитки из системного лога:

имеется over 100.000 записей, их необходимо вычитать, обработать и вывести на UI. Если брать записи «в лоб», то сначала отображаются самые старые, в этом случае помогает Linq и .Reverse(), что, естественно, просто чудовищно сказывается на перфомансе.

Быть может кто-нибудь подскажет как забрать сначала самые актуальные данные?


Заранее благодарен!
  • Вопрос задан
  • 3339 просмотров
Решения вопроса 1
kefirr
@kefirr
У меня 63к записей, тормозит именно чтение целого лога. А Reverse именно прочитает всё и начнёт возвращать с конца. Доступ к отдельным записям по индексу быстрый.

Используйте Count и доступ по индексу.
Если хочется LINQ — вот, например, метод, перечисляющий записи с конца.

public static IEnumerable<EventLogEntry> EnumerateLatestLogEntries()
{
	var entries = new EventLog("System").Entries;
	for (var i = entries.Count-1; i>=0;i--)
	{
		yield return entries[i];
	}	
}


Но если нужен именно UI, отображающий события (список там или грид), то нужно думать о виртуализации данных. То есть, например, подгружать записи из лога по мере скроллирования.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
Я бы кешировал все записи как-то у себя периодически в базу и развлекался уже с ними…
Опять же, 2998 сервр умеет по приходу нового события в журнал генерить письмо или еще как админа уведомлять — это тоже можно использовать, что бы не держать машину каждый раз
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы