Список заполнения C# в фоновом режиме

#c# #list #listview #streamreader

Вопрос:

У меня есть файл журнала с огромным количеством записей (100.000 и более). Я читаю каждую строку с помощью считывателя потока и сохраняю ее в списке. Представление списка получает список и отображает его.

Моя проблема в том, что требуется много времени, чтобы прочитать весь файл и сохранить его в списке.

Есть ли возможность постепенно заполнять список в фоновом режиме во время работы приложения? Или есть другой способ читать и загружать большие файлы?

Комментарии:

1. Вы можете использовать поток для фоновых задач.

2. На какую версию .net вы ориентируетесь? Лучшее решение зависит от ответа на этот вопрос.

3. Платформа .NET Framework имеет версию 4.7.2

Ответ №1:

Вы могли бы попробовать сделать это с помощью нитей. Вот объяснение:

https://www.tutorialspoint.com/csharp/csharp_multithreading.htm

https://docs.microsoft.com/en-us/dotnet/standard/threading/using-threads-and-threading

Ответ №2:

Используйте фоновый рабочий в .net, это также помогает отображать процент выполнения, например:

 public partial class Form1 : Form
{
       private BackgroundWorker _myWorker;
       
       public Form1()
       {
           InitializeComponent();
           _myWorker = new BackgroundWorker();
           _myWorker.DoWork  = _myWorker_DoWork;
           _myWorker.RunWorkerCompleted  = _myWorker_RunWorkerCompleted;
           _myWorker.ProgressChanged  = _myWorker_ProgressChanged;
       }

       private void _myWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
       {
           //Here you can calculate procetage of reading linses from your file
       }

       private void _myWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
       {
           //Reading from file finished:
       }

       private void _myWorker_DoWork(object sender, DoWorkEventArgs e)
       {
           var counter = 0;
           var file =new System.IO.StreamReader("<file path>");

           string line;
           while ((line = file.ReadLine()) != null)
           {
               //Adding "line" value to listView etc.
               counter  ;
               var percentage = yourCalculationMethos();
               _myWorker.ReportProgress(percentage);
           }
       }
   }