C++ Qt应用程序性能与WinAPI/MFC/WTL/
我正在考虑编写一个新的Windows GUI应用程序,其中一个要求是该应用程序必须响应速度快、加载速度快、内存占用小 我以前用WTL开发过这种类型的应用程序,但当我在日常工作中一直使用.NET时,WTL的使用变得越来越痛苦。我对使用这个应用程序不感兴趣,因为我仍然发现大型.NET UI的性能欠缺,但我对使用更好的C++框架来进行UI类Qt。 在开始之前,我想确定的是,我不会在表现方面为此后悔 那么:Qt快吗? 我将尝试通过我想接近匹配的示例来限定这个问题:我当前的WTL应用程序是。我正在开发的当前版本,对于一个32位的版本编译版本,有大约4mb的代码,只有一种语言的翻译。在现代快速PC上,加载需要1-3秒,这一点很重要,因为人们经常启动它以避免IDE等。一旦编辑一段时间,64位Win7上的内存占用通常为12-20 mb。你可以不停地运行应用程序,让它最小化,无论什么,当你切换到它时,它总是立即引起注意C++ Qt应用程序性能与WinAPI/MFC/WTL/,c++,performance,qt,C++,Performance,Qt,我正在考虑编写一个新的Windows GUI应用程序,其中一个要求是该应用程序必须响应速度快、加载速度快、内存占用小 我以前用WTL开发过这种类型的应用程序,但当我在日常工作中一直使用.NET时,WTL的使用变得越来越痛苦。我对使用这个应用程序不感兴趣,因为我仍然发现大型.NET UI的性能欠缺,但我对使用更好的C++框架来进行UI类Qt。 在开始之前,我想确定的是,我不会在表现方面为此后悔 那么:Qt快吗? 我将尝试通过我想接近匹配的示例来限定这个问题:我当前的WTL应用程序是。我正在开发的当
为了便于讨论,假设我想将我的WTL应用程序移植到Qt,以实现未来潜在的跨平台支持和/或更简单的UI框架。我想接近Qt的这一性能级别。从定义上讲,使用本机API是最具性能的选择-除此之外的任何东西都是本机API的包装器 您认为性能瓶颈究竟是什么?有严格的数字吗?老实说,含糊不清、响应速度快、加载速度快、内存占用量小“对我来说,这听起来像是一个收集需求的bug。性能经常被过度指定 切中要害: Qt的信号槽机制非常快。它是静态类型的,并用MOC转换为非常简单的slot方法调用
Qt提供了很好的多线程支持,因此您可以在一个线程中使用响应GUI,而在其他线程中使用任何GUI,而无需太多麻烦。这可能会奏效。整个程序的性能当然取决于您,但我认为您不必担心UI。由于图形场景和OpenGL支持,您也可以快速绘制2D/3D图形 最后但并非最不重要的一点是,我自己的经验中有一个例子:
- 在具有128 MB Ram的Linux/Embedded XP机器上使用Qt。Windows使用MFC,Linux使用Qt。自定义用户图形用户界面(带有大量绘图),以及带有控件/小部件的常规管理图形用户界面(AdminGUI)。从用户的角度来看,Qt和MFC一样快。注意:这是一个无法最小化的全屏程序
您可以期望更大的可执行文件大小(尤其是Qt MinGW)和更多的内存使用。在您的情况下,尝试使用其中一个IDE(例如Qt Creator)或使用Qt编写,看看您的想法。我们已经使用Qt多年了,开发了一个大小良好的UI应用程序,其中包含UI中的各种元素,包括3D窗口。每当我们遇到应用程序性能严重下降时,通常都是我们的错(我们进行了大量的数据库访问),而不是UI
在过去的几年里,他们做了大量的工作来加速绘图(这是他们花费大部分时间的地方)。一般来说,除非您真的实现了一种编辑器,否则通常不会在UI中花费太多时间执行代码。它主要等待用户的输入 我个人会选择Qt,因为我从未见过使用它会带来任何性能上的冲击。也就是说,使用wxWidgets,您可以更接近本机,并且仍然可以使用跨平台应用程序。你永远不会像Win32或MFC(及其系列)那么快,但你会赢得多平台的观众。因此,你的问题是,这值得一个小小的权衡吗?我的经验主要是MFC,最近是C。MFC非常接近裸机,因此除非您定义大量的数据结构,否则它应该非常快 对于图形绘制,我总是发现渲染到内存位图,然后blt到屏幕是很有用的。它看起来更快,甚至可能更快,因为它不担心剪裁 通常会出现某种性能问题,尽管我试图避免它。我使用一种非常简单的方法来发现这些问题:只要等到它主观上变慢,暂停它,然后检查调用堆栈。我这样做了很多次——10次通常就足够了。这是一个穷人的剖析器,但工作得很好,没有大惊小怪,没有麻烦。问题总是没人能猜到的,而且通常很容易解决 如果有任何复杂的对话,我会使用我自己的技巧,因为我被宠坏了。它们不适合心脏虚弱的人,但非常灵活,性能良好。是一个文本编辑器,用作文本编辑核心组件,WTL用作UI库 是一个文本编辑器,它使用Qt作为UI库,作为文本编辑的核心组件 我已经安装了最新版本的程序员记事本和JuffEd,并使用 空文件:
-juffed.exe专用字节:4532k虚拟大小:56288k
-pn.exe专用字节:6316K虚拟大小:57268K “wtl\Include\atlctrls.h”(264K,约10.000行,从头到尾滚动几次):
-juffed.exe专用字节:7964k虚拟大小:62640k
-pn.exe专用字节:7480K虚拟大小:63180K 单击“全选”(Ctrl-a)、剪切(Ctrl-X)和粘贴(Ctrl-V)
-juffed.exe专用字节:8488k虚拟大小:66700k
-pn.exe专用字节:8580K虚拟大小:63712K 请注意,当滚动(向下翻页/向上翻页)时,JuffEd似乎比