积极答复者
问个以前的问题,关于TextBox大数据量的问题

问题
-
<Window x:Class="GetClockMMImage.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300"> <Grid> <ScrollViewer VerticalScrollBarVisibility="Auto"> <TextBox Name="tb" Loaded="tb_Loaded" /> </ScrollViewer> </Grid> </Window>
这是前台代码
<pre lang="x-c#"> public partial class Window1 : Window { public Window1() { InitializeComponent(); } string url = "http://d.mmclock.cn/gg/pics/"; //mmclock 图片格式都是 0000.jpg string bigimageurl = "http://d.mmclock.cn/pics/"; // mmclock网页版的 大图片 string url2 = "http://www.clockm.com/tw/widget/img/clk2/hour/"; // 美女克拉克 string url3 = "http://www.bijint.com/m/img/clk/"; // bijin-tokei string bigimageurl3 = "http://www.bijint.com/jp/tokei_images/"; // bijin-tokei大图但和小图不是一张 string hz = ".jpg"; private void tb_Loaded(object sender, RoutedEventArgs e) { StringBuilder tmp = new StringBuilder(); for (int i = 0; i < 24; i++) { for (int j = 0; j < 60; j++) { tmp.Append(url3); tmp.Append(i.ToString("00")); tmp.Append(j.ToString("00")); tmp.Append(hz); tmp.Append("\r\n"); } } tb.Text = tmp.ToString(); } }
这是后台代码<br/>. 生成的 TextBox里的 数据有 1440行 当我在 TextBox里全选的时候(CTRL+A) UI就会卡死 好久...大约5,6秒左右 想知道这是什么原因造成的 如何解决
Everyone Is NO.1
答案
-
MakubeXSoft的代码在全选的时候是很卡,但在滚动上没有明显的卡。
主要是因为在选择的时候,TextBox控件内部要不断的改变SelectedText这个属性,而且他是通过TextBox的内部的一个 TextRangeBase 类型的Select方法进行复杂位置计算和验证来确定选中内容的。
研究了一下,当我们把TextBox设为只读的,在选中时就可以忽略很多关于交互时需要的属性值和一些区域计算,性能会非常好。你试一下:
IsReadOnly="True"
不知道只读是否能够满足你的要求。
Sincerely,
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 MakubeXSoft 2011年12月16日 2:31
全部回复
-
1440 行还算大量啊?一般 TextBox 放上十万行以上才能算大量。这个慢是肯定的啦。因为你用了 ScrollViewer,所以没有虚拟化支持,当然会很慢了。正确做法如下:
<Grid>
<TextBox AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Visible" />
</Grid>或:
<Grid>
<TextBox AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" />
</Grid>上面一种性能会更好,下面一种更美观。
你这个方法当年就试过. 也不是 ScrollViewer的事 不知道你有没有试过自己的代码. 1440行不多我只是说下数据量
Everyone Is NO.1 -
MakubeXSoft的代码在全选的时候是很卡,但在滚动上没有明显的卡。
主要是因为在选择的时候,TextBox控件内部要不断的改变SelectedText这个属性,而且他是通过TextBox的内部的一个 TextRangeBase 类型的Select方法进行复杂位置计算和验证来确定选中内容的。
研究了一下,当我们把TextBox设为只读的,在选中时就可以忽略很多关于交互时需要的属性值和一些区域计算,性能会非常好。你试一下:
IsReadOnly="True"
不知道只读是否能够满足你的要求。
Sincerely,
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 MakubeXSoft 2011年12月16日 2:31
-
MakubeXSoft的代码在全选的时候是很卡,但在滚动上没有明显的卡。
主要是因为在选择的时候,TextBox控件内部要不断的改变SelectedText这个属性,而且他是通过TextBox的内部的一个 TextRangeBase 类型的Select方法进行复杂位置计算和验证来确定选中内容的。
研究了一下,当我们把TextBox设为只读的,在选中时就可以忽略很多关于交互时需要的属性值和一些区域计算,性能会非常好。你试一下:
IsReadOnly="True"
不知道只读是否能够满足你的要求。
Sincerely,
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
Everyone Is NO.1