邀请测试Silverlight性能
本贴在 http://topic.csdn.net/u/20100422/18/c395942e-c682-471f-9c29-dcd424e9cf90.html?seed=1854292371&r=64941195#r_64941195 中已经发过了,为了不影响原贴,特开此新贴,邀请有兴趣者共同测试。
说明:本测试所假定的场景是在 Grid 中创建大量的行和列,这应当是一种极少会被使用到的场景,所以本测试仅供娱乐,也可能没有实际商业应用的意义。
- XML code
<Grid x:Name="LayoutRoot" Background="White"> <ComboBox Name="comboBox1" Margin="12,12,0,0" HorizontalAlignment="Left" Width="114" Height="23" VerticalAlignment="Top"> <ComboBoxItem Content="Item1" /> </ComboBox> <Button Content="Show ChildWindow" Height="23" HorizontalAlignment="Left" Margin="132,12,0,0" Name="button1" VerticalAlignment="Top" Width="114" Click="button1_Click" /> <sdk:AutoCompleteBox Height="28" HorizontalAlignment="Left" Margin="252,7,0,0" Name="autoCompleteBox1" VerticalAlignment="Top" Width="120" /> <ScrollViewer Margin="13,50,12,12" > <Grid Name="grid1" /> </ScrollViewer></Grid>
- C# code
public partial class MainPage : UserControl{ public MainPage() { InitializeComponent(); this.autoCompleteBox1.ItemsSource = new string[] {"1","10","100","2","20","200"}; this.GenerateMassControls(100,10); // 可以换成 1000,10再试试 } private void button1_Click(object sender, RoutedEventArgs e) { new System.Windows.Controls.ChildWindow().Show(); } void GenerateMassControls(int rows , int cols) { for (int i = 0; i < rows; i++) { this.grid1.RowDefinitions.Add( new RowDefinition() { Height = new GridLength(28) }); } for (int j = 0; j < cols; j++) { this.grid1.ColumnDefinitions.Add( new ColumnDefinition() { Width = new GridLength(88) }); } for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { FrameworkElement fe = new TextBox() { Text = string.Format("{0}行{1}列" , i , j ), Width=80,Height=23 }; Grid.SetRow(fe, i); Grid.SetColumn(fe, j); this.grid1.Children.Add(fe); } } }}
除了测试把 FrameworkElement fe = new TextBox()
换成FrameworkElement fe = new TextBlock() 外,
对于ChildWindow.Show()的问题也是要关注的,在这种场合下,ChildWindow.Show()需要大量的时间。
原本我以为这是ChildWindow.Show()使用一种“遮罩”技术引起的,这是我自己的叫法,意思就是通过创建一个大小和Application.Current.RootVisual的Popup,遮住整个RootVisual界面,包括可见部分和不可见部分。
可是ComboBox和AutoCompleteBox在弹出下拉选择框时同样也是使用了“遮罩”技术,但是却没有这种问题,而且在上的例子中,把TextBox换成了TextBlock,ChildWindow.Show()也没有了这种问题,可见并不是“遮罩”引起的。
那是什么原因引起了在大量布署TextBox时,ChildWindow.Show()需要大量的时间呢?
[解决办法]
我原以为你对Grid的研究放弃了的...
我觉得这有点像加载文件,一次加载太大必然会受不了,如果能有个(与滚动条结合)存取的方案,应当能够更节约资源。
[解决办法]
有个非常好的工具,叫snoop吧,可以看控件的继承。
像Label和Textblock,label其实是用textblock实现的,所以肯定textblock性能好很多。
但是label提供了更多的属性支持。
同理,textbox比block复杂很多,Snoo可验证。
[解决办法]
我最近两天搬家,家里电脑还没有假设好,周末我也帮你测试哦~:)
------解决方案--------------------
为什么要直接用TextBox呢……SL中的dv的编辑模式是点击单元格后,创建编辑控件,编辑完后,数据双向绑定回去。这就没什么性能影响。
我的项目里,SL中一个DV,大概30-50列,5000行,采用点击单元格后再编辑的方式,一点都不慢,childwindow也没问题。
[解决办法]
我电脑还不错,应该能测试
[解决办法]