2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Qt Embedded是挪威公司的图形化界面开发工具QT的嵌入式版本,它通过QTAPI与LinuxI/O以及Framebuffer直接交互,拥有较高的运行效率,而且整体采用面向对象编程,拥有良好地体系架构和编程模式.

当在资源稀缺的设备上开发嵌入式应用程序时,Qt for Windows CE 和Qt for Embedded Linux通过调整一系列参数的开启或关闭来内存及CPU的需求。这些选择参数方法的范围主要在编程风格,链接方式及内存分配。

着重注意的是,最直接节省资源的办法是在编译时去掉不需要的特性。详细可以见文档中的fine tuning features部分。

1、编程风格
2、静态链接vs动态链接
3、替换内存分配方式
4、绕过后备存放区

编程风格

与其选择随时地创造对话框和控件当它们需要时,并且在不再需要时删除它们,不如一次性地创建,同时在需要的时候使用QWidget::hide()和QWidget::show() 功能函数。为了避免应用程序启动的缓慢,应该推迟对话框和控件的创建直到需要的时候。所有这样将改善CPU的性能,所需要付出的只是更多的一点内存,但这会加快运行的效率。

动态 Vs 静态链接

许多CPU和内存是通过ELF (Executable and Linking Format)链接进程,重大的节省可以通过静态编译程序的方式实现;而不像是在实际执行中,采集与Qt库有关的部分并且动态链接,所有的应用程序将被创建成一个独立的执行文件,这个文件采用静态方式链接到Qt库上。

这些将改善程序启动时间和减少内存占有率,但前提它会损害灵活实用的特性(一旦增加新的应用部分,必须重新编译一个独立的执行文件)和程序健壮性假如一个应用部分有bug,将危害到其他的应用部分)。

建立一个静态编译

为了将Qt编译成为一个静态库,在编译时采用-static参数:./configure –static 为了将应用程序套装建立为一个一体化的应用,应当设计各个应用作为单独的控件(或者控件集)并尽可能地使用最少的代码量在main()函数。然后,设计一个独立的应用程序可以提高其他应用程序见交互的方法。Qt Extended platform就是采用典型的实例:它既可以使用一系列动态链接执行创建,也可以作为单独的一个静态的独立应用程序。

需注意的时,程序仍将动态地链接标准C库以及其它库,因为在目标平台上可能会有其他的应用程序使用它们。

当安装最终客户端应用程序时,这个方式不一定是个选择,但是当在为一个受CPU和内存限制的设备开发一个单独的应用程序套装时,这个选择是十分有益的。

替换内存分配方式

在一些平台上,那些运用C++编译的库,在使用“new”和“delete”操作方面有十分差的性能。未来改善内存分配的性能,可以通过以下的功能函数替代实现:

void *operator new[](size_t size)
{       return malloc(size);   }
void *operator new(size_t size)
{       return malloc(size);   }
void operator delete[](void *ptr)
{       free(ptr);   }
void operator delete[](void *ptr, size_t)
{       free(ptr);   }
void operator delete(void *ptr)
{       free(ptr);   }
void operator delete(void *ptr, size_t)
{       free(ptr);   }

以上这些实例显示了必要的代码采用C的内存分配。

绕过后备存放区

当运行时,Qt使用了后备存放区。比如,一个绘图缓存,可以减少闪烁和支持如重叠的图形操作。

一般,默认的流程是这样的,对于每个客户端,将自己的控件传入内存,同时,服务端负责将这些内容从内存中取出并在屏幕上绘制。但是有些硬件是众所周知的,同时已经有嵌入式软件的案例,这些对于绕开后备存放区是很有帮助的,可以运行客户端直接地熟练地操作硬件。这里有两种方式来实现直接绘制:

第一种方式是对每个控件使用Qt::WA_PaintOnScreen窗口属性,另一种是使用了QDirectPainter类来保存帧缓存的区域。想获取更多信息,可以参考architecture 文档部分的direct painting细节。

转载于:https://my.oschina.net/shelllife/blog/122730

Qt Embedded性能优化详解相关推荐

  1. 一零四、前端性能优化详解

    1 前端性能优化 介绍 页面性能优化 浏览器 浏览器的主要作用 浏览器的组成结构 浏览器是多进程的 浏览器的渲染机制 重排reflow与重绘repaint 页面加载缓慢的原因 浏览器部分 代码部分 优 ...

  2. logback性能优化详解

    前言 不正确的日志打印不但会降低程序运行性能,还会占用大量IO资源和硬盘存储空间. 本文主要总结一些能提高日志打印性能的手段. 一.通过AsyncAppender异步输出日志 我们通常使用的Conso ...

  3. 转载:SqlServer数据库性能优化详解

    本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...

  4. T- SQL性能优化详解

    http://www.cnblogs.com/Shaina/archive/2012/04/22/2464576.html 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较 ...

  5. MYSQL性能优化详解(二)

    接着上一篇学习:http://www.cnblogs.com/quanzhiguo/p/6401453.html 七.MySQL数据库Schema设计的性能优化 高效的模型设计 适度冗余-让Query ...

  6. JavaScript性能优化详解

    性能优化介绍 性能优化是不可避免的 无处不在的前端性能优化 function func(){arr = []arr[100000] = 'lg is a dog' } func() JavaScrip ...

  7. Android UI性能优化详解

    此文来自于MrPeak杂货铺,由于没法转载,只能贴这了,妄作者见谅:http://mrpeak.cn/android/2016/01/11/android-performance-ui 设计师,开发人 ...

  8. postgresql 开启大页_Postgresql-11.X 性能优化详解

    系统优化 修改 /etc/grub.conf 关闭 numa=off ,修改磁盘IO调度方式 elevator=deadline 修改方法: grubby --update-kernel=ALL -- ...

  9. SQL--数据库性能优化详解

    转:http://blog.csdn.net/andylaudotnet/article/details/1763573 转载于:https://www.cnblogs.com/zcttxs/p/32 ...

  10. MySQL之SQL优化详解(二)

    目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...

最新文章

  1. 论文标题,这么写才算好!
  2. .net中的对象序列化(1): 序列化是什么, 以及一个简单的例子
  3. python怎么打开交互式窗口-在交互式环境中执行Python程序过程详解
  4. Snow White,摘自iOS应用Snow White and more stories
  5. Python virtualenv激活与退出虚拟环境
  6. 如何在XSLT中实现勾选的效果
  7. 申请美国计算机科学,美国计算机科学(Computer Science)申请条件
  8. Centos7.x Hadoop 3.x HDFS 写入文件
  9. Kibana4简单使用
  10. 好用!一键生成数据库文档,这个开源的文档生成工具值得了解
  11. xshell 无法定位输入点_linux基础知识个人总结
  12. linux常用文本操作命令
  13. 专访雷水果国:离1.5K至18K 一个程序猿5每年的成长之路
  14. vue中this.$set的用法
  15. 中兴e9000服务器,ZXCTN 9000-E设备系列_ZXCTN 9000-E系列中兴传输设备_中兴设备 - 诺深达华为光端机...
  16. 芭蕉河梯级水电站群监控系统
  17. 很好奇这个背景图片,盯着看能感受到裸眼3D有没有
  18. 问题 A: Jugs BFS
  19. python多线程返回值问题重写Thread类的run方法
  20. vuetify 学习第一天之v-data-table_表格组件

热门文章

  1. paip.c++ lua 调用attilax总结.
  2. 恒生电子:O45好在哪儿(深度)| 国君计算机李沐华
  3. 对话Man Group:对冲基金的达尔文式竞争
  4. (转)DevOps,就是开发吃掉运维?
  5. (转)惊鸿一瞥:人工智能,改变研究方式的力量
  6. 云原生网络性能优化:service mesh 篇
  7. 从架构到代码:软件开发的七个新趋势 | 凌云时刻
  8. 亲历者说:Kubernetes API 与 Operator,不为人知的开发者战争
  9. 【高薪、俱进、携手】只要你敢来,海云就敢要!
  10. 【TSP】基于matlab模拟退火算法求解34城市旅行商问题【含Matlab源码 882期】