gpt4 book ai didi

.net - 使用堆栈和隐藏窗体预加载 Winforms

转载 作者:行者123 更新时间:2023-12-01 09:19:12 25 4
gpt4 key购买 nike

我目前正在从事一个项目,我们有几个控制非常重的用户控件,它们在 MDI Controller 中使用。这是一个业务线应用程序,它非常受数据驱动。

我们面临的问题是上述控件的加载速度非常非常慢,我们尝试了多线程控件加载的方法,但由于多种原因这不是解决方案。我们提高控件性能的解决方案最终是将表单“预加载”到隐藏窗口,创建现有表单的堆栈,并在用户请求表单时从堆栈中弹出。

现在我看到的当前问题将在我们将此“修复”推送给我们的测试人员时出现,最终我们的用户是这样的:

目前,包含预加载表单的“隐藏”窗口在任务管理器中可见,并且可以关闭,从而导致所有控件丢失。然后你必须在失去性能提升的情况下动态创建它们。其次,当用户用完堆栈时,我们将失去性能提升(下面讨论当前的解决方案)。

对于第一个问题,有没有办法从任务管理器中隐藏这个窗口,也许是通过创建一个封装程序主窗体和隐藏窗体的父窗体?

我们目前对第二个问题的解决方案是使用一个不活动计时器,当它触发时检查表单堆栈,如果堆栈未满,则将新表单加载到堆栈中。但是,这仍然有可能在创建表单时导致 UI 挂起。一个可能的解决方案是将“用过的”表单放回堆栈,但我觉得可能有更好的方法。

编辑:控制设计说明

根据我发现的评论,对于控件的具体作用缺乏清晰度。

这里是对其中一个控件的详细解释。

我已将此控件加载时间定义为从用户执行将打开控件的操作到可以访问控件进行编辑所需的时间。

该控件用于在系统中为患者输入处方,它有大约 5 个选项卡组,总共约 180 个控件。用户选择从主程序内部打开一个新的 Prescription 控件,这个控件被加载到主窗体的 MDI 子区域(这是一个 DevExpress 功能区控件)。从用户单击“新建”(或加载现有记录)到控件可见为止。程序中发生的 Action 列表是这样的:

检查堆栈是否存在控件。 如果控件存在,则将其从堆栈中弹出。 控件呈现在屏幕上。 这需要 2 秒 然后用空白对象或现有数据填充控件。 控件已准备就绪。

加载时间的平均百分比,在大约 10 台不同的机器上,使用不同的硬件,控件呈现大约占控件加载时间的 85% - 95%。

在不使用堆栈的情况下,控件加载大约需要 2 秒,使用堆栈大约需要 0.8 秒,第二次是可以接受的。

我查看了 Henry 的链接并且我之前已经实现了适用的建议。

我再次重申我的问题,即在尽可能少的 UI 中断的情况下将控件移入和移出堆栈的最佳方法是什么?

最佳答案

加速 Windows 窗体应用程序的 12 个技巧
http://devcomponents.com/blog/?p=361

...包含一些很好的提示。我会先用尽这些。

如果您真的是极度数据驱动的,我会确保您正在执行常规操作以确保速度,例如只选择您需要的列,并明智地使用存储过程。检查您的数据库实践;确保在需要的地方有索引。分析您的数据请求;找出哪些是最慢的,并对其进行优化。

很有可能您将 80% 到 90% 的时间花在 10% 到 20% 的表单事件上。找出这些痛点在哪里,并着重解决这些痛点。

关于.net - 使用堆栈和隐藏窗体预加载 Winforms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2952425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com