Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt应用程序性能与WinAPI/MFC/WTL/_C++_Performance_Qt - Fatal编程技术网

C++ Qt应用程序性能与WinAPI/MFC/WTL/

C++ Qt应用程序性能与WinAPI/MFC/WTL/,c++,performance,qt,C++,Performance,Qt,我正在考虑编写一个新的Windows GUI应用程序,其中一个要求是该应用程序必须响应速度快、加载速度快、内存占用小 我以前用WTL开发过这种类型的应用程序,但当我在日常工作中一直使用.NET时,WTL的使用变得越来越痛苦。我对使用这个应用程序不感兴趣,因为我仍然发现大型.NET UI的性能欠缺,但我对使用更好的C++框架来进行UI类Qt。 在开始之前,我想确定的是,我不会在表现方面为此后悔 那么:Qt快吗? 我将尝试通过我想接近匹配的示例来限定这个问题:我当前的WTL应用程序是。我正在开发的当

我正在考虑编写一个新的Windows GUI应用程序,其中一个要求是该应用程序必须响应速度快、加载速度快、内存占用小

我以前用WTL开发过这种类型的应用程序,但当我在日常工作中一直使用.NET时,WTL的使用变得越来越痛苦。我对使用这个应用程序不感兴趣,因为我仍然发现大型.NET UI的性能欠缺,但我对使用更好的C++框架来进行UI类Qt。 在开始之前,我想确定的是,我不会在表现方面为此后悔

那么:Qt快吗?

我将尝试通过我想接近匹配的示例来限定这个问题:我当前的WTL应用程序是。我正在开发的当前版本,对于一个32位的版本编译版本,有大约4mb的代码,只有一种语言的翻译。在现代快速PC上,加载需要1-3秒,这一点很重要,因为人们经常启动它以避免IDE等。一旦编辑一段时间,64位Win7上的内存占用通常为12-20 mb。你可以不停地运行应用程序,让它最小化,无论什么,当你切换到它时,它总是立即引起注意


为了便于讨论,假设我想将我的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似乎比