3

我有一个来自 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 又出现了,需要相当长的时间。

难道我做错了什么?

4

1 回答 1

1

如果您建议这样做:

protected override Size MeasureOverride(Size availableSize)
{
    return base.MeasureOverride(newSize);
}

导致显着放缓,这似乎不太可能。如果您在使用和不使用这种微不足道的覆盖的情况下真正进行分析并注意到不同的结果,我认为您的分析器上很可能有“只是我的代码”或类似设置,或者您已经过滤,以至于您没有看到WrapPanel.MeasureOverride你看的时候的成本GroupWrapPanel.MeasureOverride

小组的措施是否真的占用了大量时间是另一回事,但这是可信的 - 我建议挖掘调用树并找到调用的贡献,您可能会发现某些子项目的测量成本很高。

于 2013-03-09T10:47:28.833 回答