1.减少I/O *** 作
一种方式是采取缓存的方式,比如读取磁盘的数据是非常昂贵的,我们对磁盘读取出来的数据尽量的缓存起来,不要每次都去磁盘读取。
另一种方式是通过合并I/O *** 作的方式,比如我们打开一个定时器,每隔一段时间去访问一次文件,但很多时候文件并没有发生变化,这样访问是没有意义的,我们可以将访问的频率修改为当文件每发生一次变化,我们再每隔一段时间去访问数据。
2、使用正确的线程处理I/O
应用启动后,会开启一个主线程,处理用户的输入输出及界面绘制,如果我们把一些比较耗时的 *** 作放到主线程后,将会大大降低应用处理用户交互的行为,会使用户感觉到卡顿,不流畅等问题。所以,耗时的 *** 作要放到子线程去做,等任务结束后,再去通知主线程更新界面;
3、采用合适高效的API处理I/O
苹果提供了Asset图片管理器的方式去管理应用里用到的素材,通过这种方式,系统可以快速的找到图片的位置,进而减少图片读取的时间,imageNamed的方式加载图片,系统也做了缓存,对于加载过的图片,系统下次加载的话,可以快速的读取到图片的内容。
图片的渲染方式也有很多种方式,通过UIImageView,CoreGraphics、CoreImage三种方式,加载UIImage的过程需要经过解码、绘制的过长,特别是解码是一个非常耗时的 *** 作,这方面也可以优化,提升应用的性能;
4、对应用的性能进行I/O性能测试和测量
苹果提供了很多工具,可以通过Time Profiler工具去检测应用里的耗时 *** 作,进而去具体优化;
以上4中为I/O优化的方法,具体在开发过程中,需要从多方面考虑影响应用性能的条件,进而提升应用的整体性能。
设定合适的编译优化选项。STM32正常运行时对程序运行效率要求不是很高,但是在中断中要求快进快出,尤其是中断数量多且中断里处理的任务较多时,对程序的运行时间及效率要求比较苛刻,可以从以下几点优化程序:设定合适的编译优化选项
Optimization level -O0
-O0禁用所有优化。使用-O0可以加快编译和构建时间,但是生成的代码比其他优化级别要满。与其他优化级别相比,-O0的代码大小和堆栈使用率明显要高。生成的代码与源代码密切相关,但生成的代码要多得多,包括死代码。
Optimization level -O1
-O1支持编译器中的核心优化。因为这个级别比-O0提供了更好的代码质量,因此它能提供了很好的调试体验。堆栈的使用也在-O0的基础上有所提高。为了获得良好的调试体验,Arm推荐使用此选项。
两个办法:一、优化硬件(CPU、内存和硬盘等),优化I/O子系统,增强IO读写能力;第二、优化SQL语句。第一种办法治标不治本,建议用第二种办法,你的截图里边那几个几百秒的SQL语句是有问题的,要进一步优化。查看一下执行这些语句是在哪些页面,查询了什么数据,数据量多大,判断一下业务逻辑,然后再去优化。(如有帮助,请采纳,谢谢)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)