提升windows forms应用速度的几个简单方法

2024-04-17 01:48

本文主要是介绍提升windows forms应用速度的几个简单方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

整理中,欢迎大家补充

一 ngen /gac
将assembly放到gac中,并用ngen 预先编译, 应用程序装入会成n倍的提升

虽然ngen 有一大堆缺点,但windows forms应用,启动速度很重要,在实践中,我建议如下使用ngen

1. 只对不常变的 assembly进行ngen ,通常,这都是第三方的dll ,比方说第三方的ui控件,像devexpress或是janus的组件
2. 明确assembly之间的依赖, 这有助于你简短正确的写出ngen install 命令
比方说 devexpress.xtragrid依赖devexpress.xtraeditors,devexpres.data,devexpress.utils,而ngen会自动分析依赖关系,所以你只需要写一句
ngen install devexpress.xtragrid.v7.2.dll 即可

3. 为了不影响clickonce 进行应用程序分发,可以考虑将这些dll另做一个包,让用户单独安装,通常可以使用批处理文件来完成

gacutils  /i xxx.dll
ngen install xxx.dll

同时提供反删除脚本

二 控制assembly /method 大小,并且按需引用
分层的设计思想有助于达成这点, 这样能降低jit 的负担,比方说你可以将项目分成一下子项目
myapp.service.interface
myapp.service.impl
myapp.models
myapp.views
myapp.launce

任何时候都不要放弃重构, 漂亮的实现通常也会有漂亮的性能

三 设计插件结构
插件结构能够达成仅在需要时才将相应的组件调入内存,通常,要达成如上目标,需要将插件描述和插件本身分离
简单的,可以借助于spring.net ioc 的object lazy init功能
<objects default-lazy-init="true"  ...
来达到仅在需要时才会创建新实例

四 进行垃圾收集
内存的大小对应用程序影响很大,windows forms通常会在窗口最小化时自动收集,我们也可以学习 idea 的方法,在工具栏或状态栏上放一个垃圾收集按钮,并通过颜色,数字提示用户内存的占用情况

五 按需装载ui
使用tab控件将ui分组,在相应的tabpage激活时才进行相应的装载和访问行为

通常,windows forms的form都会比较复杂, 比方说一个报价单窗体可能会最近报价单列表,报价单和明细编辑,还盘分析,报价参数设定, 每个假定是1秒时间的话,全部装入就要5秒,但通常,form装入时只有一个page是激活的,这种方式可以form装入减少到1秒

六 使用按钮,在需要时才调入相应的form

btw: 五/六 两点的想法来自于microsoft dynamics 4.0的ui构造

七 尽量控制使用第三方 assmebly
通常,内置的组件,比方说 System.Windows.Forms.dll 都是已经预先编译完成的,通常可以达到较好的启动速度,同时,这些内置的组件逻辑和ui渲染比较简单 , 执行速度也相对不错 . 引入第三方组件越多,jit 负担就越重. 系统要花较多时间在assembly的装载和方法编译上.

八 检查事件的重复触发
通常,有些事件会重复发生多次,有时,这些事件发生可能违反你的想法,比方说 bindingsource.RemoveCurrent后会触发bindingsource.ListChanged事件,而且type是ItemChanged, 如果这些时候有耗时操作,通常会对速度有明显影响

九 养成使用BeginUpdate和EndUpdate 的良好习惯
这条最简单,但也最会容易忽视.通常,beginUpdate和endupdate会大大提高 ui的渲染速度,大家可以简单的测试treeview装载节点时使用BeginUpdate和EndUpdate和不使用之间的速度差别,肯定会让你吃惊.
 

这篇关于提升windows forms应用速度的几个简单方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/910479

相关文章

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu