【问题标题】:Performance implications when hiding a window instead of closing it隐藏窗口而不是关闭窗口时的性能影响
【发布时间】:2018-10-25 23:03:15
【问题描述】:

我正在制作一个有登录窗口和主窗口的程序。我想知道隐藏窗口是否比关闭它们对性能的影响更大。

我已经写下了这两个选项,如果有更好的方法,请告诉我。

private void Login()
{
    DataMatrixWindow dmWindow = new DataMatrixWindow(); // Creates new Datamatrix window
    dmWindow.Show();
    Close(); // Closes login window
}

或者保持登录窗口一直处于活动状态,并在需要时显示/隐藏它。

private void Login()
{
    DataMatrixWindow dmWindow = new DataMatrixWindow(); // Creates new Datamatrix window
    dmWindow.Show();
    Visibility = Visibility.Collapsed; // Hides login window
}

MSDN 不会注意到如果不关闭窗口可能会影响性能。

Window.Close Method: Window 创建的非托管资源 被丢弃。

Window.Closing Event: 如果要显示和隐藏一个窗口多个 应用程序生命周期中的时间,而您不想 每次显示它时重新实例化窗口,您可以处理 关闭事件,取消它,然后调用 Hide 方法。然后,您可以调用 在同一实例上显示以重新打开它。

更多细节

  • 我正在关闭并创建一个新的 Datamatrix 窗口,尽管可以使用相同的参数来显示或隐藏它,就像登录屏幕一样
  • 我不希望用户经常登录和注销,因此这些切换不应该经常发生(因此我倾向于关闭登录窗口而不是隐藏它)

【问题讨论】:

  • 我的意见:关闭它。
  • MSDN makes no note of a potential performance hit if windows are not closed. 性能影响是窗口仍然存在(即不会关闭),只是隐藏。这对您来说是否是一个问题取决于窗口包含的内容、计算机的内存限制、窗口加载和显示需要多长时间等。
  • 您不会注意到单个窗口的性能或操作系统资源影响。但与所有事情一样,如果你做得太多,这可能会严重失控。 This question 那样引人注目。

标签: c# .net wpf


【解决方案1】:

当您使用 Visibility.Collapsed 时,它不会从可视化树中删除您的窗口,因此不显示它会影响性能。 要亲自查看这种性能影响,您可以做 2 件事:

  1. 打开 Snoop,您将能够在可视化树上看到整个窗口。
  2. 创建一个测试器并通过代码用按钮(例如)填充它 - 放置 10000 个并使用 Visibility.Collapsed 设置它们。然后检查相对于干净应用程序的性能。看看启动 exe 需要多长时间才能显示出来。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我想知道隐藏窗口是否比关闭它们对性能的影响更大。

    大概吧。关闭并显示一个简单的窗口(例如登录表单)不会显着影响性能,因此我建议您在登录后关闭窗口,并在需要再次登录时显示它的另一个实例。这肯定比登录后在后台保持窗口打开要好。至少在我看来。

    【讨论】:

      猜你喜欢
      • 2012-11-02
      • 2017-10-30
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多