我有一个重写MeasureOverride方法的来自WrapPanel的派生类。我正在构建我的应用程序的框架/原型,首先做视图模型和视图,以获得屏幕流等概念,也让其他人提供设计反馈。所以它是一个非常轻量级的应用程序。
我注意到,点击一个特定的按钮需要很长时间才能显示下一个屏幕,所以我分析了这个应用程序(采样)。仅次于启动方法,MeasureOverride是占用时间最多的单一方法。这是我的代码:
public class GroupWrapPanel : WrapPanel
{
public const double ItemSize = 120.0;
protected override Size MeasureOverride(Size availableSize)
{
var numberOfRows = (availableSize.Height / ItemSize);
var numberOfCols = (Children.Count / numberOfRows) + 1;
var newSize = new Size(numberOfCols * ItemSize, availableSize.Height);
return base.MeasureOverride(newSize);
}
}所以我注释掉了整个覆盖,现在它执行得很快- MeasureOverride不在占用大部分时间的方法列表中。我只是放了一个重写,除了调用基类什么也不做。现在MeasureOverride又在那里了,花了相当长的时间。
我做错了什么吗?
发布于 2013-03-09 18:47:29
如果您建议这样做:
protected override Size MeasureOverride(Size availableSize)
{
return base.MeasureOverride(newSize);
}导致明显的减速,这似乎是极不可能的。如果您真的在使用和不使用该琐碎覆盖的情况下进行了分析,并且注意到了不同的结果,我认为很可能您的分析器上有一个"just my code“或类似的设置,或者您已经进行了过滤,以便在查看GroupWrapPanel.MeasureOverride时不会看到WrapPanel.MeasureOverride的开销。
面板的测量是否真的占用了大量的时间是另一回事,但是可信的-我建议在调用树中挖掘并找出调用的贡献,您可能会发现一些子项的测量成本很高。
https://stackoverflow.com/questions/15309355
复制相似问题