Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
 Аватар для Toxa33rus
3925 / 927 / 125
Регистрация: 16.04.2009
Сообщений: 1,982

Как быстро прочитать построчно текст из текстбокса?

13.08.2025, 16:51. Показов 2510. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На форме есть текстбокс, в котором примерно миллион строк. Я читаю построчно текст так:
VB.NET
1
2
3
4
For Each s As String In Me.TextBox8.Lines
    Application.DoEvents()
    ' ....
Next
В итоге это занимает полчаса.
Как-то быстрее можно это сделать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.08.2025, 16:51
Ответы с готовыми решениями:

Изменение цвета текстбокса и изменение цвета текста внутри текстбокса в процессе работы программы
Добрый вечер! У меня такой вопрос Есть такое задание Написать программу, которая будет...

Как прочитать текст построчно
Есть буфер string с текстом. Нужно прочитать этот буфер построчно. Либо запихнуть в массив string...

Как можно сохранить текст из текстбокса в базе данных sql server 2005
Пытаюсь сохранить в качестве картинки,но выдает ошибку.Подскажите Добавлено через 23 минуты...

35
Модератор
Эксперт .NET
 Аватар для Yury Komar
4361 / 3431 / 512
Регистрация: 27.01.2014
Сообщений: 6,259
14.08.2025, 14:40
Студворк — интернет-сервис помощи студентам
Toxa33rus, вам выше показал I can ключевой момент, который должен убрать такую долгую обработку. Ну и ваш If(...) тут не к месту будет, вам нужно непострочно добавлять строки в новый текстбокс, а пачкой из массива с обработанными данными...
2
dive
 Аватар для I can
4983 / 4700 / 848
Регистрация: 13.04.2015
Сообщений: 9,914
14.08.2025, 14:46
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

То есть, основные моменты такие:

1. Dim arr() As String = TextBox1.Lines' читаем данные в массив из текстбокса.
2. Построчно обрабатываем данные в массиве, можно и в отдельных потоках, но ради миллиона строк вряд ли целесообразно.
3. TextBox2.Lines = arr' Выгружаем обработанные данные в текстбокс.
2
 Аватар для Toxa33rus
3925 / 927 / 125
Регистрация: 16.04.2009
Сообщений: 1,982
14.08.2025, 14:59  [ТС]
Переделал и стало работать в 300 раз быстрее
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
Dim result() As String = TextBox8.Lines
For i = 0 To UBound(result) - 1
    If i Mod 100 = 0 Then
        Application.DoEvents()
        ProgressBar1.Value = i
    End If
    Dim line As String = result(i)
    
    ' line = replace...
    result(i) = line
Next
TextBox9.Lines = result
Ещё быстрее не нужно, на этом остановлюсь.
0
 Аватар для Andrey-MSK
3368 / 2254 / 388
Регистрация: 14.08.2018
Сообщений: 7,631
Записей в блоге: 4
14.08.2025, 15:10
Цитата Сообщение от Toxa33rus Посмотреть сообщение
Application.DoEvents()
А вот если вместо этого использовать интерфейс IProgress<T>, то ещё быстрее будет... В VB .NET он вроде как должен быть...
0
dive
 Аватар для I can
4983 / 4700 / 848
Регистрация: 13.04.2015
Сообщений: 9,914
14.08.2025, 15:14
Цитата Сообщение от Toxa33rus Посмотреть сообщение
UBound(result) - 1
А почему -1 ?
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4361 / 3431 / 512
Регистрация: 27.01.2014
Сообщений: 6,259
14.08.2025, 15:14
Цитата Сообщение от Toxa33rus Посмотреть сообщение
Dim line As String = result(i)
' line = replace...
    result(i) = line
а зачем выделять еще память под переменную для таких операций? можно ведь напрямую с элементом массива работать

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
Dim result() As String = TextBox8.Lines
For i = 0 To result.Length - 1
    If i Mod 100 = 0 Then
        Application.DoEvents()
        ProgressBar1.Value = i
    End If
 
    result(i) = result(i) + 10 'Здесь выполняйте арифметику свою
 
Next
 
TextBox9.Lines = result
0
 Аватар для Andrey-MSK
3368 / 2254 / 388
Регистрация: 14.08.2018
Сообщений: 7,631
Записей в блоге: 4
14.08.2025, 15:15
Toxa33rus, Пример на C#
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
private static async Task CopyFile(string source, string destination, IProgress<int> status, CancellationToken token)
{
    try
    {
        FileInfo sourceFile = new FileInfo(source);
        long totalBytes = sourceFile.Length;
        long bytesCopied = 0;
 
        using (FileStream sourceStream = sourceFile.OpenRead())
        {
            using (FileStream destStream = new FileStream(destination, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                byte[] buffer = new byte[8192];
                int bytesRead;
                int progress = 0;
                int oldProgress;
 
                while ((bytesRead = await sourceStream.ReadAsync(buffer, token)) > 0)
                {
                    await destStream.WriteAsync(buffer.AsMemory(0, bytesRead), token);
 
                    bytesCopied += bytesRead;
                    oldProgress = progress;
                    // Рассчитываем прогресс операции
                    progress = (int)(bytesCopied * 100 / totalBytes);
                    // Обновляем его
                    if (oldProgress != progress)
                        status?.Report(progress);
                }
            }
        }
    }
    catch (OperationCanceledException)
    {
        return;
    }
    catch (Exception ex)
    {
        throw new ApplicationException(ex.Message, ex);
    }
}
И использование метода
C#
1
2
3
4
using (_cts = new CancellationTokenSource())
{
    await CopyFile(source, destination, new Progress<int>(v => pgDownloadProgress.Value = v), _cts.Token);
}
Где
C#
1
new Progress<int>(v => pgDownloadProgress.Value = v)
обновление элемента UI.
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4361 / 3431 / 512
Регистрация: 27.01.2014
Сообщений: 6,259
14.08.2025, 15:15
Цитата Сообщение от I can Посмотреть сообщение
А почему -1 ?
тоже обратил внимание...
0
 Аватар для Toxa33rus
3925 / 927 / 125
Регистрация: 16.04.2009
Сообщений: 1,982
14.08.2025, 15:19  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
А почему -1 ?
опечатка)

Цитата Сообщение от Yury Komar Посмотреть сообщение
а зачем выделять еще память под переменную для таких операций? можно ведь напрямую с элементом массива работать
Да, можно, но мне так как-то удобнее. Переменная просто от старой версии осталась и если её убрать, то много переписывать надо, а мне лень.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4361 / 3431 / 512
Регистрация: 27.01.2014
Сообщений: 6,259
14.08.2025, 15:23
Toxa33rus, понял
0
2289 / 1605 / 400
Регистрация: 26.06.2017
Сообщений: 4,762
Записей в блоге: 1
14.08.2025, 16:22
Цитата Сообщение от Toxa33rus Посмотреть сообщение
Операции примерно такие:
Тут прям напрашивается применение ООП.
Парсим файл в коллекцию объектов, каждый из которых содержит координаты XYZ. Каждая координата ссылается на одно из уникальных значений во вспомогательной коллекции, но главное чтобы эти значение были ссылочными типами. Замена любого значения будет делаться наносекунду, так как будет меняться только одна величина во вспомогательной коллекции.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4361 / 3431 / 512
Регистрация: 27.01.2014
Сообщений: 6,259
15.08.2025, 07:52
Uswer, Согласен, но ТС сходу такого не осилит, к сожалению.
0
1548 / 1525 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
15.08.2025, 11:52
Цитата Сообщение от Toxa33rus Посмотреть сообщение
заметил такую особенность: первые 20-50 тыс. строк выполняются очень быстро, а дальше происходит замедление. Даже такое чувство, что чем дальше к концу, тем медленнее.
Я тоже наступал на эти грабли. Пришел к выводу, что при добавлении новой строки, перерисовывается
весь текстбокс. Это и приводит к замедлению в геометрической прогрессии.
1
 Аватар для Toxa33rus
3925 / 927 / 125
Регистрация: 16.04.2009
Сообщений: 1,982
18.08.2025, 08:01  [ТС]
Цитата Сообщение от MrCrown Посмотреть сообщение
Пришел к выводу, что при добавлении новой строки, перерисовывается
весь текстбокс.
Я не в текстбокс сначала дописывал, а в переменную.
0
dive
 Аватар для I can
4983 / 4700 / 848
Регистрация: 13.04.2015
Сообщений: 9,914
18.08.2025, 08:14
Цитата Сообщение от Toxa33rus Посмотреть сообщение
а в переменную.
Тип String в Visual Basic .NET неизменяем — значение строки невозможно изменить после создания.
Любые методы String, манипулирующие содержимым, не изменяют содержимое текущей строки, а возвращают новую строку.
В общем, там ужас творится "под капотом". Это совсем не тот String, который был в VB6.
0
 Аватар для Toxa33rus
3925 / 927 / 125
Регистрация: 16.04.2009
Сообщений: 1,982
18.08.2025, 08:16  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
В общем, там ужас творится "под капотом".
Вот и мне кажется, что изначально выделяется какой-то объем памяти под строку и до этого объема всё происходит быстро. Дописывание в строку работает очень быстро, но с какого-то момента скорость резко падает. Видимо с этого момента переменная пересоздается заново.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.08.2025, 08:16
Помогаю со студенческими работами здесь

Как достать текст из динамически созданного текстбокса
Здравствуйте, уважаемые посетители форума. не так давно стал писать на VB.NET и сталкнулся с рядом...

Выделение элемента списка, похожего на текст из ТекстБокса
У меня есть ЛистБокс и ТекстБокс. Как сделать, чтобы при событии textBox_changed выделялся элемент...

Взять текст из текстбокса
Всем привет, сделал маленькую страничку на асп &lt;%@ Page Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot;...

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

Перенос значения текстбокса из одной форму в другую в другой текст
Добрый вечер. Не получается перенести введенное значение в Textbox1 из формы Form1 в другую форму...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru