我有一个来自WrapPanel的派生类,它覆盖了MeasureOverride方法。我正在构建我的应用程序的骨架/原型,首先做视图模型和视图以获得屏幕流程等的概念,也让其他人提供有关设计的反馈。所以它是一个非常轻量级的应用程序。
我注意到在启动下一个屏幕之前点击一个特定的按钮花了很长时间,所以我描述了应用程序(采样)。在Startup方法旁边,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又在那里,耗费了相当长的时间。
我做错了吗?
答案 0 :(得分:1)
如果你建议这样:
protected override Size MeasureOverride(Size availableSize)
{
return base.MeasureOverride(newSize);
}
导致显着放缓,这似乎不太可能。如果您真的使用和不使用琐碎的覆盖进行配置并注意到不同的结果,我认为您最有可能在您的探查器上有“仅我的代码”或类似的设置,或者您已经过滤,以至于您没有看到当您看到WrapPanel.MeasureOverride
时,费用为GroupWrapPanel.MeasureOverride
。
小组的措施是否确实占用了大量时间是另一回事,但是可信 - 我建议在调用树中挖掘并查找调用的内容,您可能会发现某些子项目的测量成本很高。