C# WPF textBox 超过1000行文本就假死状态

ZDSRK 2017-01-06 10:44:47
我有这么一个小程序,textBox1里输入多行文本,点击按钮A后自动把textBox1每行之间插入一行"XXXXX"文本后显示在texBox2里面.

几百行文本的还不卡,只要超过1000行,程序就假死状态.大概几分钟后texBox2才显示出文本.

请问有改良的方法吗?

下面这个程序
...全文
1117 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
royler 2017-01-09
  • 打赏
  • 举报
回复
重写控制台输出功能,输出几万行都没问题,看这个 http://www.newoneday.com/archives/43/
闭包客 2017-01-09
  • 打赏
  • 举报
回复
引用 6 楼 closurer 的回复:
第一点是这个插入的文本的操作需要几分钟应该是有问题的。有优化的控件。 第二点是耗时任务不应该由 UI 线程去做,UI 线程只负责更新 UI
有优化的空间。
闭包客 2017-01-09
  • 打赏
  • 举报
回复
第一点是这个插入的文本的操作需要几分钟应该是有问题的。有优化的控件。 第二点是耗时任务不应该由 UI 线程去做,UI 线程只负责更新 UI
exception92 2017-01-09
  • 打赏
  • 举报
回复
1000行完全可以看成是一个集合了,要能清楚控件的使用场景。如果用listbox显示几个文字,显然有点“大材小用”了。
exception92 2017-01-09
  • 打赏
  • 举报
回复
textBox 为内容控件,自身没有“虚拟化”功能,要换成带有“虚拟化”的条目控件才行。例如楼上的ListBox
ZDSRK 2017-01-07
  • 打赏
  • 举报
回复
引用 2楼贝爷_野外求生 的回复:
当然,我也试了textBox,如果按照listbox那样肯定会慢不少,因为它是通过追加字符串耗资源,在winform里可能要好点
所以,在这里WPF用StringCollection可能会提高点性能
测试了下,1000行大概需要7秒

button的代码如下:
        private void button2_Click(object sender, RoutedEventArgs e)
{
this.textBox2.Text += DateTime.Now.ToString() + "\r\n";
System.Collections.Specialized.StringCollection lines = new System.Collections.Specialized.StringCollection();
for (int line = 0; line < textBox1.LineCount; line++)
{
lines.Add(textBox1.GetLineText(line));
}
for (int i = 0; i < lines.Count; i++)
{
this.textBox2.Text += lines[i];
this.textBox2.Text += "A" + (i + 1).ToString().PadLeft(2, '0')+"\r\n";
}
this.textBox2.Text += DateTime.Now.ToString() + "\r\n";
}
应该还能进一步提高性能,但是对WPF不是太熟,希望有高人出现
谢谢朋友 我试试
  • 打赏
  • 举报
回复
当然,我也试了textBox,如果按照listbox那样肯定会慢不少,因为它是通过追加字符串耗资源,在winform里可能要好点
所以,在这里WPF用StringCollection可能会提高点性能
测试了下,1000行大概需要7秒

button的代码如下:
        private void button2_Click(object sender, RoutedEventArgs e)
{
this.textBox2.Text += DateTime.Now.ToString() + "\r\n";
System.Collections.Specialized.StringCollection lines = new System.Collections.Specialized.StringCollection();
for (int line = 0; line < textBox1.LineCount; line++)
{
lines.Add(textBox1.GetLineText(line));
}
for (int i = 0; i < lines.Count; i++)
{
this.textBox2.Text += lines[i];
this.textBox2.Text += "A" + (i + 1).ToString().PadLeft(2, '0')+"\r\n";
}
this.textBox2.Text += DateTime.Now.ToString() + "\r\n";
}
应该还能进一步提高性能,但是对WPF不是太熟,希望有高人出现
  • 打赏
  • 举报
回复
我在WPF上测试了10000行没有什么延时啊,立马蹦出来 你要花几分钟才能出来肯定有问题,电脑配置差也不会这种状态,应该是你的WPF设计的问题 这是我的WPF代码:
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            for (int i = 0; i < 10000; i++)
            {
                this.listBox1.Items.Add("这是文本" + i.ToString());
            }
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            for (int i = 0; i < listBox1.Items.Count; i++)
            {
                this.listBox2.Items.Add("A" + i.ToString().PadLeft(2, '0'));
                this.listBox2.Items.Add(this.listBox1.Items[i]);
            }
        }
界面代码:
<Window x:Class="WPFTest1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="717.073" Width="516.463" Loaded="Window_Loaded">
    <Grid Margin="0,0,-47,-220">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="71*"/>
            <ColumnDefinition Width="23*"/>
            <ColumnDefinition Width="276*"/>
            <ColumnDefinition Width="63*"/>
            <ColumnDefinition Width="122*"/>
        </Grid.ColumnDefinitions>
        <ListBox x:Name="listBox1" HorizontalAlignment="Left" Height="639" Margin="50,25,0,0" VerticalAlignment="Top" Width="121" Grid.ColumnSpan="3"/>
        <ListBox x:Name="listBox2" HorizontalAlignment="Left" Height="639" Margin="230.829,25,0,0" VerticalAlignment="Top" Width="121" Grid.ColumnSpan="3" Grid.Column="2"/>
        <Button x:Name="button1" Content="Button" HorizontalAlignment="Left" Margin="112.829,25,0,0" VerticalAlignment="Top" Width="75" Grid.Column="2" Click="button1_Click"/>

    </Grid>
</Window>

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧