优化 UI 应用启动时间的方法
优化 UI 应用启动时间的方法
优化 UI 应用启动时间的方法:
懒启动:
将与启动主界面无关的代码安排到启动之后再执行。可以使用多线程技术来低耦合地达到这一点。
使用缓存、池技术:
某些事项如网络连接、数据库连接等往往有如下特点:单次来看,不算特别耗时,但连续重复执行这种操作时,累积的时间还是非常可观。对于这种操作,如果需要连续重复执行,可以考虑使用如下技术:
- 缓存技术:只有第一次请求资源时是真实的请求,同时将这第一次请求的资源缓存。然后以后请求资源时都是从此缓存中读取数据。不过要注意,使用此技术要考虑脏读的问题。
- 池技术:事先先在空闲时间中预建立一些连接或申请一些资源,这些资源不会在未来被使用完后立刻丢弃,而是不断回收重复使用。这样到以后真正请求多次资源时,可以减少请求的总成本。
UI 代码与非 UI 代码分离:
将与 UI 界面元素显示无直接关系的代码从
UI 线程
中剥离。不要将这些代码放到UI 线程
、UI 线程安全函数
中执行,应该新建线程来执行这些无关代码。锁粒度检查:
减少上锁的个数、次数与粒度。能用 volatile 就不要用锁,能锁局部就不要锁方法。
使用
Thread.sleep(0)
来触发线程调度:- 在多线程同步中,可能需要设定一个非阻塞请求循环来不断请求某资源。这种请求有可能会大幅度占用 CPU 资源,抑制其它线程的执行,从而导致短期死锁。应该在这种请求循环中插入方法
Thread.sleep(XXX)
来让出此线程的 CPU 使用权,从而使其它线程得以过多地执行,来结束这种短期死锁。
- 在多线程同步中,可能需要设定一个非阻塞请求循环来不断请求某资源。这种请求有可能会大幅度占用 CPU 资源,抑制其它线程的执行,从而导致短期死锁。应该在这种请求循环中插入方法
普通的时间优化检查:
能重用同一个变量就尽量重用,不要每次都新建一个变量。
能用单例模式就尽量使用单例模式。
将循环中的变量创建移动至循环之前创建。
bug 检查:
记录多线程执行时的时间日志信息,用于排错。
对多线程、锁的逻辑进行检查,避免短期死锁。
一般说来,如果各个并发线程相互独立,应该会具有不可再现性。将应用多次运行时,这些线程启动的先后顺序将不同。
如果发现实际上并不是这样,这些线程每次启动的先后顺序都是一样的,说明这些线程中可能有某种依赖关系。有某种依赖关系意味着这些线程不能充分的并发执行,从而影响多线程的效益、降低应用运行效率。如果这些依赖关系本不应该存在,那就说明应用的代码逻辑有问题。有某种依赖关系有可能源于上锁。应当排查这些线程的内部运行机制。
检查是否有冗余代码、重复代码。
- 在项目较大时,常常会出现反复初始化、过度封装、过度执行为保证安全的冗余代码。应该仔细排查、重构这些代码。
优化 UI 应用启动时间的方法相关推荐
- 零基础小白怎么自学UI设计?自学UI设计有什么方法?
本文由:"学设计上兔课网"原创,图片素材来自网络,仅供学习分享 零基础小白怎么自学UI设计?自学UI设计有什么方法?学ui设计,相信大家的第一选择就是想着自学.毕竟报班的费用不便宜 ...
- Android-性能优化-UI优化
Android-性能优化-UI优化 相关系列 Android 性能优化-UI优化 Android 性能优化-内存优化 概述 Android 应用的卡顿,丢帧等,这些影响用户体验的因素绝大部分都与 16 ...
- 性能优化的一般性原则和方法
看了一篇详细介绍性能优化的博文,感觉很不错,特转载自此.原文地址:性能优化的一般性原则和方法 正文 作为一个程序员,性能优化是常有的事情,不管是桌面应用还是web应用,不管是前端还是后端,不管是单点应 ...
- Unity文档——优化UI控件
优化UI控件 版本检查:2017.3 - 难度:高级 Optimizing Unity UI指南的这一部分重点介绍特定于某些类型的UI控件的问题.虽然大多数UI控件在性能方面都相对类似,但两个突出显示 ...
- SSH配置优化和慢的解决方法
SSH配置优化和慢的解决方法 参考文章: (1)SSH配置优化和慢的解决方法 (2)https://www.cnblogs.com/kaishirenshi/p/9495997.html 备忘一下.
- .NET一个线程更新另一个线程的UI(两种实现方法及若干简化)
本片博文接上一篇:.NET多线程执行函数,给出实现一个线程更新另一个线程UI的两种方法. Winform中的控件是绑定到特定的线程的(一般是主线程),这意味着从另一个线程更新主线程的控件不能直接调用该 ...
- 优化SQL Server数据库查询方法
本文详细介绍了优化SQL Server数据库查询方法. SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) ...
- Android非UI线程更新UI的几种方法
2019独角兽企业重金招聘Python工程师标准>>> Android用于实现非UI线程与UI线程的交互方法如下: 1.Handler 2.Activity.runOnUIThrea ...
- 割线法求解过程_求解稀疏优化问题2——临近点方法+半光滑牛顿法
这篇文章是我之前一篇文章的兄弟篇,没看过的可以看下面这个. 邓康康:求解稀疏优化问题--半光滑牛顿方法zhuanlan.zhihu.com 我们考虑的问题仍然是如下的一般问题: 其中 ,并且 特别大 ...
最新文章
- 文字超过省略_从楚篆到楚玺的文字结构
- Cadence快捷键设置亲测有效!
- win10系统下多python版本部署
- 中国钢筋加工设备运营现状与未来前景规划报告2022-2028年版
- Vue父子组件通信小总结
- R:matlab交互,数据调用
- java正则表达式的菜鸟使用分析
- 万字图文 | 聊一聊 ReentrantLock 和 AQS 那点事(看完不会你找我)
- Linux NFS服务器的安装与配置(最简单的文件共享集群)
- java迪杰斯特拉算法_迪杰斯特拉算法完整代码(Java)
- mybatis 二级缓存失效_二级缓存updateBatchById失效
- sentinel控制台无数据解决
- Python学习笔记之函数(四)
- Java方法及构造方法
- 拓端tecdat|R语言对股票风险“溃疡指数”( Ulcer Index)曲面图可视化
- 新路由3 高恪魔改固件+底包
- 英雄联盟 python 刷等级_厉害了,30行python代码爬取英雄联盟全英雄皮肤
- [免费分享]微信小程序从入门到精通视频教程 [8.2G]
- 范型方法 范型参数 范型返回值
- 第二节 LwIP简介
热门文章
- 降低成本,提高生产力—8句话讲清RPA的部署
- SUSE 开发者提议在 GCC 编译器中用 Python 替代 AWK
- MYSQL 更改数据库data存储目录 创建用户 创建权限 设置远程访问的权限.
- C# 效率也不是很差嘛
- 10 分钟学会 5 个酷炫 Linux 命令
- oracle 数据 导出 excel 自动分多个文件,从oracle数据库中导出大量数据到excel中为什么自动分成了好几个excel文件《excel表格新手入门》...
- Nacos自定义扩展的 Data Id 配置
- 线程回顾Thread
- 事务注解 @Transactional
- 策略模式Strategy Pattern应用场景