优化技术之高级优化
2013-06-29
高级优化
目前被普遍采用的优化方案有:
1. 优化循环,通过重新组织重复的子表达式来提高循环体的运行性能。
2. 减少使用对象的数量来提高运行性能。
3. 缩减网络传输数据来缩短等待时间等。
本文学习另外三种性能优化策略:
1. 采用对象池技术,提高对象的利用率。
本文提出一种对象池技术,将有效解决创建和释放对象带来的性能损失问题。
根据需要先创建一定量的对象,在需要创建对象的时候从池中申请空闲对象,释放对象时把对象释放回池中,以有效避免由创建和释放对象带来的性能损失。
游戏分析:假设同时显示的敌机数量最多不超过5架,采用对象池技术可以先定义一个对象池,容量为同时的敌机的最大数量。
Enemy[] enemyPool = new Enemy[5];
for(int i=0; i<5; i++) {
enemyPool[i] = new Enemy();
}
在类Enemy里增加标志属性used和带参数的reset方法使对象重置到初始化。在载入游戏的时候,初始化对象池,在需要创建对象的时候从对象池中获取一个未被使用的对象并使用reset方法初始化,需要释放对象的时候只需将修改标志位属性used以供下次使用。使用对象池技术不但减少了相当大一部分的资源开销,而且避免了频繁创建对象的额外资源开销。
2. 尽量使用基本数据类型代替对象。
在游戏中飞机要发射子弹,基于面向对象的设计模式可将子弹抽象成Bullet类,然后定义代表子弹的对象池,在发射子弹的时候,在对象池中查找可用对象并重置其位置为飞机所在的位置。由于对象操作的效率低于对基本数据类型的操作,由此可以想到由基本数据类型来代替对象实现。
int[][] bullet = new int[2][10]; // 假设屏幕同时显示最多10颗子弹
for(int i=0; i<10; i++) {
bullet[0][i] = 999; // 对应x位置
bullet[1][i] = 999; // 对应y位置
}
在每一个Game Loop中
while(run) {
for(int i=0; i<10; i++) {
if(bullet[1][i] == 999) {
// 设置子弹发射位置为飞机当前的位置
bullet[0][i] = plane.getX();
bullet[1][i] = plane.getY();
} else {
// 子弹纵坐标减小
bullet[1][i] –= 10;
}
}
}
3. 用简单的数值计算代替复杂的函数计算。
减少函数计算复杂度,减少复杂函数的调用次数,避免使用复杂函数计算,有利于程序性能提高。与复杂函数运算相比,简单的数值计算无论从时间还是空间上都有极大的优势。
由基本的数学原理可知,当角度一定时其对应的三角函数值也是一定的,又因为三角函数是周期函数,因此本文的优化算法是用0度~45度的函数值通过简单的四则运算来模拟任意函数值。
游戏开发性能优化状况:
当前游戏性能的瓶颈在于有限的存储资源和偏弱的处理器速度,而游戏优化的关键之处在于节省资源开销、节省冗余计算和计算简化,所以牺牲部分设计上的结构化换来性能的提升,在当前情况下仍然是非常有必要的。本文提出的优化方法为在较低的硬件条件下实现流畅的画面,提供了可行的解决方案。
相关文章
- jnpf开发文档_java开发最新技术
- 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档
- 聊聊如何在数据产品中应用自然语言处理技术?
- 优化MySQL视图技术实现性能优化(mysql视图性能)
- Oracle表空间收缩技术实现数据库优化(oracle表空间收缩)
- 技术精湛的Oracle:Join技术大放异彩(oracle的join)
- 系统安装RAID1技术搭建的 Linux 系统(raid1安装linux)
- Oracle 去重技术:优化关键数据的处理(oracle去重关键字)
- 提升用户体验:利用Redis缓存技术实现数据优化(redis缓存使用案例)
- 管理MySQL 4G内存管理:最新优化技术(mysql4g内存)
- 百脑虫之hook技术
- Dockerfile 构建镜像 – 每天5分钟玩转容器技术(13)
- 深入探究MySQL数据库:技术研究、应用及优化(mysql研究)
- 尚观MySQL运维技术及全流程教程(尚观mysql运维教程)
- 解析Oracle数据库查询技术(oracle相关查询)
- 深入了解Linux网络抓包技术:优化网络性能从抓包开始(linux网络抓包)
- Oracle列触发器:优化表内数据操作的技术策略。(oracle列触发器)
- Linux:优化内存管理技术(linux 内存模型)
- 深入学习:Oracle存储过程优化技术(oracle存储过程优化)
- Oracle数据库优化之内存缓存技术(oracle 内存缓存)
- 如何使用Redis技术来优化PHP性能(清楚redis php)
- 优化储存多线程应用Redis技术(多线程使用redis存储)
- 如何优化Oracle数据库查询性能 优化Oracle中不可欠缺的技术最佳实践指南(oracle中不榭?-)
- 研究Redis缓存技术的文献资料综述(redis缓存参考文献)
- 融云在WICC2021分论坛分享视频编码优化技术