Ускорить обработку строк файла в программе. Строк может быть огромное количество - Visual Basic .NET
Формулировка задачи:
Здравствуйте, уважаемые обитатели форума! Перейду сразу к делу. Итак, есть небольшая часть программы, которая данные из текстовика переносит в ДатаГрид. В текстовике может быть немерянно строк, хоть полмиллиона, поэтому было решено использовать BackGroundWorker. Собственно в каждой строке нужные мне части разделены пробелами, при этом некоторые части могут отсутствовать (если таковые имеются - заменяются пробелами). Вот код:
скорость работы не радует - на добавление тысячи записей требуется в среднем 11 секунд, т. е. почти 20 минут на 100 К строк. вычитал где-то что, мол, использование переменных типа char и string прошлый век, и намного быстрее использовать класс system.text.stringbuilder. Вдохновился прочитанным, заменил
на
и ничего не изменилось - скорость прежняя.
Все ли я делаю правильно и есть ли действенный способ ускорить это безобразие? Заранее спасибо за ответ!
Решение задачи: «Ускорить обработку строк файла в программе. Строк может быть огромное количество»
textual
Листинг программы
Dim tm As New Stopwatch Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'здесь можно определить имя файла и передать его как параметр RunWorkerAsync Dim fPath As String = "" BackgroundWorker1.RunWorkerAsync(fPath) tm.Start() End Sub Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork 'имя файла Dim fPath As String = CType(e.Argument, String) 'имитация считывания строк файла Dim ss As String = "asdfghjklzxcvbnqwertyui2345678yhbvgtrfvcfr" Dim dv(10000) As DataGridViewRow Dim DGV As New DataGridView DGV.ColumnCount = 6 DGV.Columns(0).Name = "Col1" DGV.Columns(1).Name = "Col2" DGV.Columns(2).Name = "Col3" DGV.Columns(3).Name = "Col4" DGV.Columns(4).Name = "Col5" DGV.Columns(5).Name = "Col6" Dim str(5) As String For i = 0 To 10000 str(0) = ss.Chars(2) str(1) = ss.Chars(4) str(2) = ss.Chars(6) str(3) = ss.Substring(6, 5) str(4) = ss.Substring(14, 5) str(5) = ss.Chars(20) dv(i) = New DataGridViewRow dv(i).CreateCells(DGV) dv(i).SetValues(str) Next e.Result = dv End Sub Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerComplet DataGridView1.Rows.Clear() DataGridView1.Rows.AddRange(CType(e.Result, DataGridViewRow())) tm.Stop() MsgBox("Time (ms) = " & tm.ElapsedMilliseconds) End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д