【问题标题】:Best way to handle different panels occupying same area处理占用相同区域的不同面板的最佳方法
【发布时间】:2012-12-08 01:17:34
【问题描述】:

我有这个应用程序:

当用户单击其中一个 navBarItems(如 Microsoft OUTLOOK)时,我想更改标记区域。我一直在做一些研究,很多人说我可以添加几个面板并在用户单击 navBarItem 时显示/隐藏它们。但是该区域将包含很多网格视图和很多其他控件。我不知道我是否想在应用程序启动时初始化所有这些,因为在 CPU 和内存上保持所有控件同时运行会很困难。而且我认为这不是这种情况的优雅解决方案。但是如果我选择在用户点击相应的 navBarItem 时初始化控件,这对用户来说会很迟钝。

对于这种情况最好的设计方法是什么?

PS:我也可以使用商业库。

谢谢。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    不一定要滞后。如果您先显示屏幕,然后在后台填充数据,则对用户来说可能不会太糟糕。此外,一旦特定屏幕被初始化,您可能会将其保存在内存中,以便用户随后导航到它时会更快。

    另外,查看您正在加载到每个控件中的数据。有些数据是一样的吗?你能在后台预加载一些数据并保留它吗?

    你有很多下拉列表吗?如果是这样,您是否可以预先填充或缓存一些下拉列表数据以提高性能?

    是否有一个或两个面板将在大部分时间使用?如果是这样,您可以预加载这些面板,以便用户对他们最常导航到的面板有更好的体验。

    加载数据的后台处理会使您的代码更加复杂,但这将是从您的应用中获得良好响应时间的最佳方式。

    Here 是使用 Task 从 UI 运行后台线程的示例。

    另一个使用 BackgroundWorker 的 one。

    【讨论】:

    • 如果我将初始化的屏幕保存在内存中,它将是 10 多个网格视图,内存中有大量数据以及其他控件。我认为它没有效率。
    • 我并不是说同时填充它们,在用户导航到它们时填充它们,而是在后台加载数据。这将更快地显示屏幕并为用户提供更好的体验。如果控件占用太多内存,则在用户导航到另一个面板时将其丢弃。如果没有,请保留它们,以便用户第二次导航到它时,他们将获得更好的体验。
    • 所以你是说坚持使用具有隐藏/显示功能的多个面板,但为了更好的用户体验和内存管理做一些技巧?
    • 是的,我还更新了我的答案,包括几个链接,让您更好地了解可能的后台处理类型。根据您使用的 .Net 版本,还有其他方法。这是比较常见的两种方式。
    • 好的,我去看看!
    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多