实战经验:CString.Format性能探究
作者:BlogUpdater |
时间:2018-09-01 |
浏览:2660 |
评论已关闭 条评论
在编写性能攸关的应用的时候,往往会忽视一些看似普通函数的调用成本。今天以CString.Format为例进行探究。
在操作字符串时,我们会因为方便而选择使用CString对象,在格式化字符串时,我们会调用CString的Format方法。简单方便的背后,往往需要付出一定的代价。
我们来编写一个示例程序来说明。
首先在VS中创建一个控制台应用程序,编写以下三个函数,分别测试CString.Format,_tcscpy_s和_stprintf_s在大量调用的场景下的性能。
使用CString.Format
CString str(_T("")); DWORD dwStart = GetTickCount(); for (int i = 0; i < 500000; i++) { str.Format(_T("%s"), _T("Hello")); } DWORD dwEnd = GetTickCount(); printf("CString.Format: %d ms\n", dwEnd - dwStart);
使用_tcscpy_s
TCHAR arr[10] = {0}; DWORD dwStart = GetTickCount(); for (int i = 0; i < 500000; i++) { _tcscpy_s(arr, 10, _T("Hello")); } DWORD dwEnd = GetTickCount(); printf("_tcscpy_s: %d ms\n", dwEnd - dwStart);
使用_stprintf_s
TCHAR arr[10] = {0}; DWORD dwStart = GetTickCount(); for (int i = 0; i < 500000; i++) { _stprintf_s(arr, 10, _T("%s"), _T("Hello")); } DWORD dwEnd = GetTickCount(); printf("_stprintf_s: %d ms\n", dwEnd - dwStart);
测试结果
从以上测试结果中,我们看到耗时最久的是CString.Format方法,其次是_stprintf_s,性能最优者为_tcscpy_s。但是从编写程序的方便性来说,CString内建的字符串操作方法众多,语法也比较简单,开发效率会更胜一筹。
在编写性能攸关的程序时,如果仅仅是因为编写程序方便而是用CString.Format的话,那结果就是:你自己写程序写爽了,用户在使用你的程序时,根本就不是那么一回事。要么是运行缓慢,要么是界面卡顿,要么是内存使用量暴涨(对象基础设施中因为私有数据成员和虚函数表而消耗更多的内存)。
另外
为了避免Debug和Release模式下,调试基础设施对程序施加的影响,这里的示例工程没有使用Debug模式测试,而是直接使用Release模式,用于模拟真实的产品环境。
总结
1) 人的生命由一段时间组成,倘若你的产品毫无意义的消耗了你的用户的时间,就等于浪费了他(她)的生命。
2) 性能攸关的场合,宁愿写程序的时候累一点,也要保证性能最优化。
3) 享受到的抽象便利越多,背后付出的代价(可能)也会更大。
如需转载,请注明来自:拓扑梅尔智慧办公平台 | TopomelBox 官方站点
相关推荐
- 小技巧:VS2010中添加控件成员变量没有反应的问题
- Posted on 07月19日
- 提高生产力:配色,模板参数过滤及IntelliCode
- Posted on 08月25日
- 微软开发者大会(Build 2020)将在线上举行
- Posted on 05月19日
- 为什么我的对话框创建失败了?菜鸟错误1
- Posted on 12月19日
评论已关闭。