首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

邀请测试Silverlight性能,该怎么处理

2012-02-11 
邀请测试Silverlight性能本贴在 http://topic.csdn.net/u/20100422/18/c395942e-c682-471f-9c29-dcd424e9c

邀请测试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也没问题。
[解决办法]
我电脑还不错,应该能测试
[解决办法]

探讨
引用:
本来想顶一下的,不过看见楼主的结贴率……

我也想结贴的,实在是我不该提一些难有满意答案的贴,下次会注意的了~

热点排行