Ускорить обработку строк файла в программе. Строк может быть огромное количество - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы