对比WINX,WTL,MFC,SmartWin代码效率

news/2024/7/4 13:41:25

我们以Hello, World! 程序为例,对比一下各个界面库的代码效率。对于界面程序,个人认为空间效率较之时间效率要占据主导因素,故此这里比较的是空间效率。另外,由于优化的极限是直接用Windows SDK,故此对比亦加入Windows SDK作为参考。参与此次对比的有:

  • WINX
  • WTL
  • MFC
  • SmartWin
  • Windows SDK

功能:Hello, World!

界面:模态对话框

编译器:Visual C++ 2005

源代码:

  • Windows SDK
    hello.cpp
  • WINX
    hello.cpp
  • WTL
    hello.cpp
  • SmartWin
    hello.cpp
  • MFC
    HelloMfcDlg.cpp
    HelloMfcDlg.h
    HelloMfc.cpp
    HelloMfc.h

比较结果:

首先,我们对比一下静态链接多线程模式的C库——即MultiThread(MT)时的情形。MFC亦以静态链接方式链接。由于所有的代码均静态链接进去,这种方式无疑是最公平的。对比结果如下:

  • Windows SDK:48.0 K Reference:kernel32.dll, user32.dll
  • WINX:52.0 K Reference:kernel32.dll, user32.dll
  • WTL:76.0 K Reference:kernel32.dll, user32.dll, advapi32.dll, ole32.dll, oleaut32.dll
  • SmartWin:132.0 K Reference:kernel32.dll, user32.dll, comctl32.dll
  • MFC:184.0 K Reference:kernel32.dll, user32.dll, advapi32.dll, gdi32.dll, oleaut32.dll, shlwapi.dll, winspool.drv

可以看出,WINX产生的代码效率最高,并非常接近Windows SDK,而WTL则次之。SmartWin虽然以模板构建,但是比之MFC并无太大的优势。

我们再来比较一下动态链接多线程模式的C库——即MultiThread DLL(MD)时的情形。MFC采用动态链接方式。这是大型程序典型的链接方式,因此这个比较结果也颇有意义。

  • Windows SDK:6.0 K Reference:kernel32.dll, user32.dll, msvc80.dll
  • WINX:7.0 K Reference:kernel32.dll, user32.dll, msvc80.dll
  • WTL:28.5 K Reference:kernel32.dll, user32.dll, msvc80.dll, advapi32.dll, ole32.dll, oleaut32.dll
  • SmartWin:由于SmartWin编译的lib中没有MultiThread DLL(MD)模式,这里未针对其进行比较。
  • MFC:10.5 K Reference:kernel32.dll, user32.dll, msvc80.dll, mfc80.dll

尽管MFC采用动态链接mfc80.dll的方式,但是它生成的代码仍然不及WINX短小。





http://www.niftyadmin.cn/n/3654703.html

相关文章

股票技术指标详解--指数平均数(EXPMA)

来源:http://wma.cmbchina.com/education/stock/index/expma.htm 指数平均数(EXPMA) 该指标以交叉为主要讯号。该指标可以随股价的快速移动,立即调整方向,有效地解决讯号落后的问题,但该指标在盘整行情中不适用。 一、使用方法&a…

20款帮助你加薪的IDEA神器插件!!!(十分推荐)

前言 idea是我们程序员的第二个女朋友,我们得把它弄的非常智能,才能更加高效的工作,那么这里就给大家介绍一些非常好用的插件,让我们的idea变的更加高效好用。 一、Material Theme UI 可以将原始外观更改为Material Design外观…

如何实现Custom Control?如何进行可视化开发?

这里,我们要回答smithfox在winx论坛上提的第一个问题: 在WINX内,怎么写一个Custom Control,也就是说自己实现Paint的Control。其实,winx不只是可以实现自定义控件,而且允许你将这些控件直接放到对话框中&am…

java项目集成J2Cache(基于内存和 Redis 的两级 Java 缓存框架)

一、概述 SpringCache本身是一个缓存体系的抽象实现,并没有具体的缓存能力,要使用SpringCache还需要配合具体的缓存实现来完成。 虽然如此,但是SpringCache是所有Spring支持的缓存结构的基础,而且所有的缓存的使用最后都要归结于…

WINX支持DirectX,OpenCV吗?

偶尔也会听到这样的一些疑问:WINX支持DirectX,OpenCV吗?也会听到SmartWin支持OpenCV这样的说法。下面我们分析一下这个问题。我们知道,库之间共存的障碍,主要有以下几点:其一:编译期的符号(指类…

股票技术指标详解--顺势指标(CCI)

来源:http://wma.cmbchina.com/education/stock/index/cci.htm 顺势指标(CCI) 一、顺势指标 该指标用来测量股价脱离正常价格范围之变异性,正常波动范围在100之间。属于超买超卖类指标中较特殊的一种,是专门对付极端行情的。在一般常态行情…

WINX中使用OpenCV的一个样例

上一篇我们谈到WINX与其他库共存的问题。空口无凭,我们这里就给出一个WINX中使用OpenCV的样例。数字图像的直方图均衡化是常用的图像增强方法。这个样例本身的源代码取之:数字图像的直方图均衡化(C/C源代码)。作者HUNNISH&#xf…

Kryo 高性能序列化和反序列化

一、pom.xml <dependency><groupId>com.esotericsoftware</groupId><artifactId>kryo</artifactId><version>4.0.0</version> </dependency>二、封装工具类 package com.cxs.web.system.kryo;import com.cxs.common.util.Ar…