Как эффективно добавить огромную строку в текстовое поле? - PullRequest
5 голосов
/ 19 января 2010

У меня есть массивная строка (мы говорим 1696108 символов в длину), которую я очень быстро прочитал из текстового файла.Когда я добавляю его в свое текстовое поле (C #), это занимает много времени.Такая программа, как Notepad ++ (неуправляемый код, я знаю), может сделать это почти мгновенно, хотя Notepad тоже занимает много времени.Как я могу эффективно добавить эту огромную строку и как что-то вроде Notepad ++ делает это так быстро?

Ответы [ 3 ]

10 голосов
/ 19 января 2010

Если это Windows Forms, я бы предложил использовать RichTextBox в качестве замены для вашего TextBox. В прошлом я обнаружил, что он намного эффективнее обрабатывает большой текст. Также при внесении изменений на месте обязательно используйте проверенный временем метод SelectionStart / SelectedText вместо манипулирования свойством Text.

rtb.SelectionStart = rtb.TextLength;
rtb.SelectedText = "inserted text"; // faster

rtb.Text += "inserted text"; // slower
6 голосов
/ 19 января 2010

Блокнот и класс окна TextBox оптимизированы для текста размером 64 КБ. Вы должны использовать RichTextBox

0 голосов
/ 19 января 2010

Изначально вы могли просто визуализировать первые n символов, которые можно просмотреть в пользовательском интерфейсе (при условии, что у вас есть прокручиваемое текстовое поле). Затем запустите отдельный поток для асинхронной визуализации последовательных блоков.

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

private void PopulateTextBoxWithFileContents(string path, TextBox textBox)
{
    using (var fs = File.OpenRead(path))
    {
        using (var sr = new StreamReader(fs))
        {
            while (!sr.EndOfStream)
                textBox.Text += sr.ReadLine();                        

            sr.Close();                    
        }

        fs.Close();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...