#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);
}
}
}