魏新 20190919-3 效能分析
时间:2019-09-25
本文章向大家介绍魏新 20190919-3 效能分析,主要包括魏新 20190919-3 效能分析使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/7628
修改后的代码地址为:https://e.coding.net/Eustia/wf.git
要求0
以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。
cpu参数:Intel Core i7-4710MQ 2.50GHz
消耗时间:4.872s,4.811s,4.818s
平均消耗时间:4.834s
截图如下:
要求1
给出你猜测程序的瓶颈。你认为优化会有最佳效果,或者在上周在此处做过优化 (或考虑到优化,因此更差的代码没有写出) 。
对字符出现次数的排序进行了很多次无用排序,导致时间增多。我认为在此处优化会有最佳效果。
//对单词出现频次进行排序 for(i=0;i<50000;i++) { q[i]=wd[i].time; } sort(q,q+50000,greater<int>());
要求2
通过 profile 找出程序的瓶颈。给出程序运行中最花费时间的3个函数(或代码片断)。要求包括截图。
由于上周使用的codeblocks进行编程,这周为了效能分析把代码迁到了vs2017上面,但是经过了好几个小时的调试依旧无法成功进行效能分析,于是无法给出截图。猜测程序运行中最花费时间的3个函数或代码片段为:
for(i=0;i<total+1;i++) { q[i]=wd[i].time; } sort(q,q+total+1,greater<int>());
for(j=0;j<total;j++) { if(wd[j].time==q[i]) { j=j+flag; while(wd[j].time!=q[i]) { j=j+1; flag++; } printf("%s",wd[j].s_wd); strcpy(c_temp,wd[j].s_wd); len=strlen(wd[j].s_wd); s=15-len; temp=q[i]; break; } }
while((c=getchar())!=EOF) { if(fflag==1) { if((c>=65&&c<=90)||(c>=97&&c<=122)) { if(c>=65&&c<=90) { c=c+32; } word[ii]=c; ii++; } fflag=0; } else { if((c>=65&&c<=90)||(c>=97&&c<=122)||(c==39)||(c==45)) { if(c>=65&&c<=90) { c=c+32; } word[ii]=c; ii++; } else { if(ii>0) { wdcount(word); memset(word, 0, sizeof(word)); ii=0; fflag=1; } } } }
要求3
根据瓶颈,"尽力而为"地优化程序性能。
由于该功能较为简单,只需修改参数即可,修改后的代码如下:
for(i=0;i<total+1;i++) { q[i]=wd[i].time; } sort(q,q+total+1,greater<int>());
优化后的程序运行截图如下:
运行时间为:4.776s,4.790s,4.796s
平均运行时间为:4.787s
要求4
再次 profile,给出在 要求1 中的最花费时间的3个函数此时的花费。要求包括截图。
无法成功进行效能分析,故此题无法完成。
原文地址:https://www.cnblogs.com/Eustia/p/11584297.html
- android am 命令简单讲解(一)
- 渗透测试专用版Linux:BackBox3.13发布
- android dumpsys 快速入门
- 不容小觑的金融诈骗手段 – 419诈骗
- 新年伊始,微软再遭叙利亚电子军挑衅
- 任天堂3DS游戏机烧录卡蓝屏事件
- android调用dialog.hide()引起的输入事件派发错误问题追踪
- 互联网世界的毒瘤——僵尸网络
- android 游戏移植 (一) (文末有福利) | SDL 西游释厄传调试
- 自制分布式漏洞扫描工具
- [细节剖析]X Windows中一个22年的漏洞
- android 游戏移植 (二) | SDL2.0适配 西游释厄传
- Android调用系统相册和拍照的Demo
- 黑客是如何通过RDP远程桌面服务进行攻击的
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android中RecyclerView实现Item添加和删除的代码示例
- 小程序图片上传,存储,获取,显示(含源码)
- Android网络请求框架Retrofit详解
- Android控件RadioButton实现多选一功能
- 解决Android使用Handler造成内存泄露问题
- Android中imageView图片放大缩小及旋转功能示例代码
- Android 中 ThreadLocal使用示例
- Flutter基础widgets教程-Transform篇
- 借助云开发实现小程序模版消息推送(含源码)
- Android 监听软键盘状态的实例详解
- Android 中 ActivityLifecycleCallbacks的实例详解
- Android 优化Handler防止内存泄露
- Android Spinner 组件的应用实例
- Android编程实现扭曲图像的绘制功能示例
- 直播带货APP开发,圆形旋转动画