首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 缤纷校园 英语学习
2010考研 | 自学考试 | 成人高考 | 专 升 本 | 法律硕士 | MBA/MPA | 中 科 院
四六级 | 商务英语 | 公共英语 | 职称日语 | 职称英语 | 博思 | 口译笔译 | GRE GMAT | 日语 | 托福
雅思 | 专四专八 | 新概念 | 自考英语 | 零起点英韩语 | 在职申硕英语
在职攻硕英语 | 成人英语三级
等级考试 | 水平考试 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
公务员 | 报关员 | 报检员 | 外销员 | 司法考试 | 导游考试 | 教师资格 | 国际商务师 | 跟单员
单证员 | 物流师 | 价格鉴证师 | 银行从业资格 | 证券从业资格 | 人力资源管理师 | 管理咨询师
期货从业资格 | 社会工作者
会计职称 | 注会CPA | 经济师 | 统计师 | 注册税务师 | 评估师 | 精算师 | 高会 | ACCA | 审计师
法律顾问 | 会计证
一级建造师 | 二级建造师 | 造价师 | 监理师 | 安全师 | 咨询师 | 结构师 | 建筑师 | 安全评价师
房地产估价师 | 土地估价师 | 设备监理师 | 岩土工程师 | 质量资格 | 房地产经纪人 | 造价员
投资项目管理 | 土地代理人 | 环保师 | 环境影响评价 | 物业管理师 | 城市规划师 | 公路监理师
公路造价工程师 | 招标师
执业护士 | 执业医师 | 执业药师 | 卫生资格
您现在的位置: 考试吧(Exam8.com) > 软件水平考试 > 系统分析师 > 正文

计算机软件水平考试:C++Q&A:性能优化

分配大量小型类对象(如:10,000小型记录)最快和最佳方法是什么? 当然,MFC 序列流化对象可以完成所需的任务。但是,内存的分配和销毁相当耗时。有没有办法对此进行改进?
  我无法告诉你最好的方法,因为那取决与应用程序的具体情况和其使用方式。性能和内存分配是如此巨大的一个主题,有关它们已经有很多很多书籍。没有哪一种方案适合所有的情形。最优化总是需要在速度和其它资源之间进行明智的权衡。例如,如果你愿意建立巨型索引,那么就会获得非常快的查询速度。或者要想显示速度快,那么就得以加载时间作为代价。因此,我只能就某些需要考虑的问题给你提供一个概述,以及提供一些工具和途径以帮助你自己找到答案。
  如果你觉得程序的性能不太满意,首先必须确定瓶颈在哪,对此要有清醒的认识。你可以借助复杂的工具(profiler)来产生各种有关性能的报告,但如果只是想知道你的代码在哪里耗时,那么用一些自己编写的简单工具即可,我写了一个类叫 ShowTime,它可以报告代码的某些部分执行时要花费多长时间。为了使用它,你只需在要用时钟的代码块起始处实例化一个 ShowTime 堆栈对象即可:
void CalculatePi(){    ShowTime st("Calculating pi");   // do it}
这段代码将产生一个象下面这样的 TRACE 信息:
Calculating pi: 342 msec
  ShowTime 是如何工作的呢?它为智能指针以及在代码块起始处和末尾处你想做某些自动处理的地方使用常见的 C++ 构造函数/析构函数(ctor/dtor)模式。ShowTime 的构造函数将时钟时间(自从进程启动后的时钟嘀嗒数)保存在某个数据成员中;析构函数则用从最后的时钟数中减去这个时钟数并产生一条信息。由于构造函数/析构函数是在代码块的起始处/末尾处调用的,这样便测算出总共用了多少时间。代码如 Figure 1 所示。
  ShowTime 并不太复杂。比如,它并不考虑多线程的情况,并且也不报告在每个函数中某个工具消耗了多少时间。但是对于日常使用来说,它能给你提供应用程序在何处耗时的很好的参考。不要忘记针对 Release 版本进行性能测试!毕竟那是你交付使用的版本。此外,Release 和 Debug 版本之间的差别可能会曲解你的结果。例如,依赖你的设置方式,debug 版本也许要进行额外的堆栈,这样便使应用程序性能下降。由于在 Release 版本中没有 TRACE 信息,所以我添加了另外一个类,PerfLog,它可以将性能统计定向到一个文件:
// open log filePerfLog mylog("MyResults.log");

转帖于:软件水平考试_考试吧
文章搜索
计算机软件水平考试:C++Q&A:性能优化网友评论网友评论
版权声明 --------------------------------------------------------------------------------------
    如果软件水平考试网所转载内容不慎侵犯了您的权益,请与我们联系,我们将会及时处理。如转载本软件水平考试网内容,请注明出处。
 gaoxiaoliang