C# 基于性能和内存多次添加相同用户控件的最佳方法?
我有一个C# 基于性能和内存多次添加相同用户控件的最佳方法?,c#,silverlight,xaml,C#,Silverlight,Xaml,我有一个类项:UserControl,我需要将这些项多次添加到面板(如网格中) 注意:我会经常清除并添加这些项目 在性能和内存消耗方面,我可以选择哪种方法 或者,(i)。只需添加如下所示的项目(UserControl) for (int i = 0; i < myCollection.Count; i++) { Item _item = new Item(); _item.Name = "Item - "+i.ToString(); panel1.Childr
类项:UserControl
,我需要将这些项多次添加到面板(如网格中)
注意:我会经常清除并添加这些项目
在性能和内存消耗方面,我可以选择哪种方法
或者,(i)。只需添加如下所示的项目(UserControl)
for (int i = 0; i < myCollection.Count; i++)
{
Item _item = new Item();
_item.Name = "Item - "+i.ToString();
panel1.Children.Add(_item);
}
for(int i=0;i
或
我能和你一起去吗
<Grid ItemSource="myCollection" >
<ItemsControl >
<ItemsControl.ItemTemplate>
<DataTemplate>
//User control's template
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
//用户控件的模板
提前谢谢。
Joy Oyies Rex K我不认为有什么真正的区别。
我不知道性能如何(我认为XAML和你在水下做的一样),但是内存消耗是一样的,因为在这两种情况下控件都是创建的/垃圾收集的。关于性能,你能做的最糟糕的事情就是一遍又一遍地创建
用户控件的新实例。因此,基本上你的解决方案(i)所建议的
为什么??因为UserControl
的xaml
总是针对您创建的每个实例进行解析
那么我们能做些什么呢?您可以将控件设计为模板控件
。这样,模板xaml只解析一次,并在实例化新实例时重用
但在代码中创建新实例仍然是不明智的。Silverlight具有项控件
,能够处理大量条目列表,并且只能为实际可见的条目实例化可视元素
因此,我强烈建议使用ItemsControl
(仅为可见条目实例化可视元素)
控件默认模板的一些xaml:
<Style TargetType="MyItemControl">
<Setter Property="Template" Value="{StaticResource MyItemControlDefaultTemplate}"/>
</Style>
<ControlTemplate x:Key="MyItemControlDefaultTemplate" TargetType="MyItemControl">
...
</ControlTemplate>
...
我建议使用可以应用虚拟化的模板。因此,一旦需要,就可以创建UI元素。@Sankarann我需要动态更新面板中的项目,例如,在按钮点击
,因此我仅在按钮点击
事件中(通过方法1)在面板中添加了这些项目(此处仅在引发点击
事件时才创建项目)。在这个场景中,模板化的模板是否也有帮助?模板是否也会有帮助?如果是这样的话,您可以对集合本身执行所有操作..这适用于所有场景吗?我想我不理解您的问题,但是如果您让XAML处理它,它将在您删除基础项时自动更新您的用户控件集合。
public class MyItemControl : Control
{
public MyItemControl(){DefaultStyleKey=typeof(MyItemControl);}
}
<Style TargetType="MyItemControl">
<Setter Property="Template" Value="{StaticResource MyItemControlDefaultTemplate}"/>
</Style>
<ControlTemplate x:Key="MyItemControlDefaultTemplate" TargetType="MyItemControl">
...
</ControlTemplate>