如何提高winform的加载时间?

2023-12-27

我有一个 WinForms 应用程序。主窗体有很多控件,这也是加载速度非常慢的原因之一。我想做的是使表单加载速度更快。

我已经设置了beginupdate和endupdate。该表单不会在后台工作线程中呈现,因为这是主表单。没有初始形式。当用户单击应用程序图标时,这是加载的第一个表单。添加进度条或任何启动形式对我来说不是一个好主意。

我在这里检查了有关堆栈溢出的其他问题,但他们似乎没有遇到与我相同的问题。

如果您有一些例子/想法,如果您能与我分享,那就太好了。


一些建议:

  • 尽量减少 UI 的复杂性。您的用户将会感谢您,并且您需要加载的控件也会减少。例如,如果您有 3 或 4 个不经常使用的控件,您是否可以将它们移至对话框或表单的折叠“高级”部分,以便您可以推迟创建/显示它们?是否需要所有控制?真的吗?想想您想要实现的工作流程 - 当前的控件集是实现该工作流程的最简单方法吗?是否需要立即显示所有控件?也许您可以将它们放置在选项卡控件中的单独选项卡上(因此只有在显示选项卡时才实际创建控件)?

  • 您能否减少所使用的控件类型的范围?每种新类型的控件都可能导致您的程序加载新的 dll 来支持它。每个必须初始化的 dll 都会导致额外的启动时间。

  • 您是否使用了启动缓慢的控件?简单的文本字段会很快,但复杂的图形控件可能会很慢。

  • 加载了多少个程序集(您自己的)?将所有代码合并到一个程序集中(例如使用 ILMerge),加载时间可能会大大缩短。

  • 删除所有不需要的初始化代码。你能简化初始化吗?是否可以推迟任何初始化(例如,仅在用户单击实际需要存在该数据的第一个按钮时才创建一些成员变量,如果实际上还不需要数据库,则不要尝试创建与数据库的连接等)

  • 您可以推迟(部分)UI 的创建吗?例如,您可以将一组控件放入单独的 UserControl 表单中,然后在启动后不久以编程方式将此表单添加到 MainForm 中(例如在计时器上)。这将使您的 MainForm 非常快速地出现,然后不久之后就会“填充”其他控件,这可能不会改善实际的启动时间,但它会“感觉”得更快并且启动响应更快。 (如果您的 MainForm 滚动并且这些额外的控件最初不在屏幕上,则这种方法也非常有效,因为只有当用户向下滚动足以看到它们时才需要创建它们)

  • 您是否显示任何可能加载缓慢的信息(例如大位图图像或从 SQL 服务器获取的数据)?您可以推迟它们的加载或将其作为后台线程运行吗?使用压缩来加快加载速度?降低分辨率以最大限度地减少必须加载的数据量?预处理数据并将其存储在快速启动缓存中以供下次程序运行时使用?

  • 某些控制措施可以用优化方法代替吗?例如您可以将“按钮栏”创建为一组 10 个独立控件,或者创建为具有 10 个按钮外观的单个控件。使单个控件初始化和重绘速度比 10 个独立控件要容易得多。

当然,一旦收集到最明显的容易实现的目标(甚至之前):

  • 在分析器下运行程序,看看它把时间花在哪里。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何提高winform的加载时间? 的相关文章

随机推荐

  • 将使用“by”创建的摘要转换为 data.frame

    df1 data frame c 2 1 2 c 1 2 3 4 5 6 seq 141 170 create data frame names df1 c gender age height column names df1 gender
  • 在基于 JSF 的应用程序中捕获并记录/通知未处理的异常

    我想使用 log4j 检查并记录 JSF Web 应用程序中所有未处理的异常 我读了这篇文章使用 log4j 记录 Java 中的运行时异常 https stackoverflow com questions 2344654 log run
  • ElementClickInterceptedException:消息:元素在点 (x,y) 处不可单击,因为另一个元素遮挡了它

    您好 我继续收到错误 ElementClickInterceptedException 消息 元素在点 x y 处不可单击 因为另一个元素遮挡了它 我尝试了很多解决方法 包括时间延迟 但似乎没有任何效果 我在这里尝试了一些解决方案 Sele
  • 正则表达式和 ISO8601 格式的日期时间 [重复]

    这个问题在这里已经有答案了 我有一个 ISO 8601 格式的日期时间字符串 2012 10 06T04 13 00 00 00 以及以下正则表达式与该字符串不匹配 d 4 d 2 d 2 T d 2 d 2 d 2 d 2 d 2 我不明
  • 右 |如何按自定义顺序排列 df 列的字符向量?

    我有一个如下所示的数据框 Fruit X Y Z apple banana orange papaya a f k banana orange grape b g l orange banana c h m grape d i n bana
  • 从 python 脚本解锁 Windows 中的文件

    我可以在 windows 7 中取消阻止 Windows 从 Internet 下载 自动阻止的文件吗 遇到此类文件时会引发 WindowsError 我想捕获这个异常 并运行一个 powershell 脚本 如下所示 Parameter
  • 带有 topojson 的脆边?

    Mike Bostock 分享了一系列全球范围内的 topojson 文件 由于我想要更多数据和更高质量 我现在从 Natural Earth 生成自己的高质量 topojson 文件 为了简单起见 我的 makefile 命令是这样的 a
  • Spring MVC 捕获 http 错误(400.404,....)

    下午好 几天来一直在为这个问题苦苦挣扎 我想帮助 Spring beans 解析器 捕获应用程序中的所有错误 几乎立即捕获异常 但捕获 http 错误不会被处理 问题解决的本质是无法拦截http错误 我不想使用web xml和控制器 因为我
  • 如何在keras转换层中进行零填充?

    我正在尝试实现科学文章中的模型 该文章说他们正在使用零填充 是否可以在中配置此填充keras Conv2D https keras io layers convolutional conv2d 我看到的唯一可能的填充值是 填充 有效 或 相
  • JPA Buddy 逆向工程工具未显示表格

    当我单击 来自数据库的实体 时 它正确连接到数据库 并且成功执行内省 以便我可以从侧面视图看到表列表 但在弹出窗口中我得到 0 个表 0 个视图和 0 个映射关系 0tables https i stack imgur com Gl0Ua
  • Linux 中使用 pipeline() 的链式管道

    我知道如何使用 C 在 Linux 中创建一个管道 如下所示cat tmp txt grep foo 但是我在实现像这样的多个链式管道时遇到问题cat tmp 1 txt uniq c sort 如何使用 C 来做到这一点pipe 在 Li
  • 为什么 PHP 被认为是面向对象的?

    我一直在阅读 OOP 的定义 但不明白为什么 PHP 被认为是面向对象的 这与 PHP 的 基础级别 不具备而更高级的功能却有什么关系吗 在大部分标准库已经创建并且该语言已经建立之后 OO 特性通过版本 3 5 分阶段添加到 PHP 中 背
  • 计算平均值或将 ArrayList 作为函数的参数

    是否有内置方法来计算整数 ArrayList 的平均值 如果没有 我可以创建一个函数 通过获取 ArrayList 的名称并返回其平均值来实现此目的吗 这真的很简单 Better use a List It is more generic
  • php 获取数组的数据大小

    拥有这个数组 Array block1 gt Array list gt Array sub list gt Array links gt Number total gt Number block2 gt Array attributes
  • 如何指定 Android 模拟器应在我的开发计算机上使用哪个网络接口?

    我的开发机器同时连接到两个不同的网络 一种是通过以太网 eth0 另一种是通过 WiFi en1 在这种情况下 Android 模拟器似乎总是想要连接 eth0 上的网络 从命令行启动模拟器时 是否有一个选项可以告诉它使用开发计算机上的特定
  • java中非静态块有什么用? [复制]

    这个问题在这里已经有答案了 可能的重复 实例初始值设定项与构造函数有何不同 https stackoverflow com questions 1355810 how is an instance initializer different
  • 使用捆绑属性增强图形库

    我是 BGL 的新手 尝试使用 BGL 设置一个简单的最短路径查找程序 其中无向图被定义为具有自定义定义的 EdgeProperty 和 VertexProperty 的邻接列表 我收到编译时错误 我将其归因于我在模板和 Boost 方面的
  • spring data jpa @query 和可分页

    我正在使用 Spring Data JPA 当我使用 Queryto 定义查询WITHOUT Pageable 有用 public interface UrnMappingRepository extends JpaRepository
  • 通过instance-id获取实例

    我需要通过实例 ID 获取实例 是否可以在不请求所有实例的列表的情况下完成此操作 我试过了 ec2 conn boto connect ec2 aws access key id key aws secret access key acce
  • 如何提高winform的加载时间?

    我有一个 WinForms 应用程序 主窗体有很多控件 这也是加载速度非常慢的原因之一 我想做的是使表单加载速度更快 我已经设置了beginupdate和endupdate 该表单不会在后台工作线程中呈现 因为这是主表单 没有初始形式 当用