Никто еще не упомянул виртуализацию, которая действительно является единственным способом обеспечить предсказуемую производительность для огромных объемов данных.Даже использование StringBuilder
и преобразование его в строку каждые полсекунды будет очень медленным, как только журнал станет достаточно большим.
При виртуализации данных вы будете хранить только необходимые данныев памяти (то есть, что пользователь может видеть, и, возможно, немного больше с обеих сторон), в то время как остальное будет храниться на диске.Старые данные будут «выкатываться» из памяти, когда на смену им приходят новые данные.
Чтобы TextBox
выглядел так, как будто в нем много данных,Вы бы сказали, что это так.Когда пользователь прокручивает, вы должны заменить данные в буфере соответствующими данными из базового источника (используя произвольный доступ к файлу).Таким образом, ваш пользовательский интерфейс будет отслеживать файл, а не прослушивать события в журнале.
Конечно, это гораздо больше работы, чем просто использование StringBuilder
, но я подумал, что стоит упомянуть на всякий случай.