作业2
一 对本周作业中的功能4(仅由文件重定向读入,不由控制台输入)做效能分析
因为我是用c语言写的代码,所以重定向不难 只需要用freopen(“”文件路径“”,“”读写方式“”,"stdin")来做。结束的时候不要忘了fclose()就可以,例子如截图
我个人认为效能分析是程序对cpu和内存占用的综合参数,完成这个功能真的很坎坷,我没做过测试,我做的功能是使用c++实现的,所以我下的是vc,我查了一下测试用vs,所以我下了个vs2012,花了我2个小时,安装的时候已经十点多了,晚上十二点还没有装完,所以我没有关机,早上发现没安装成功,心里非常烦躁。我早上6点就起来了。然后我又下了个vs2015这次下载3个小时,唯一感到庆幸的安装成功了。我上网百度了下怎么效能分析,操作如下 。
1 单击分析按钮
2性能向导打钩
3 选择cpu采样
这样就开始进行了效能测试。
运行程序
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include<fstream> 5 #include<string> 6 #include<map> 7 #include <iomanip> 8 using namespace std; 9 int main() 10 { 11 FILE *fp; 12 char text[1024]; 13 char s[100]; 14 //gets(s); 15 printf(">wf -s < the_show_of_the_ring\n"); 16 fp=freopen("d:\\是.txt","r",stdin); 17 //fp=freopen("功能4.FILE","r",stdout==NULL); 18 //fp=fopen(s,"r"); 19 int n=0; 20 int i; 21 map<string,int>my_map; 22 while(fgets(text,1024,fp)!=NULL) 23 { 24 // puts(text); 25 i=0; 26 while(text[i]!='\0') 27 { 28 char s[30]; 29 int j=0; 30 while((text[i]>='a'&&text[i]<='z')||(text[i]>='A'&&text[i]<='Z')) 31 { 32 if(text[i]>='A'&&text[i]<='Z') 33 text[i]+='a'-'A'; 34 s[j++]=text[i++]; 35 } 36 s[j]='\0'; 37 if(my_map[s]==0) 38 n++; 39 my_map[s]++; 40 if(text[i]=='\0') break; 41 else 42 i++; 43 } 44 45 } 46 fclose(fp); 47 map<string,int>::iterator it; 48 printf("\n\n"); 49 // printf(">wf -s test.txt\n"); 50 cout<<"total"<<" "<<n-1<<" words"<<endl<<endl<<endl; 51 for(it=my_map.begin(),i=1;it!=my_map.end();it++,i++) 52 { 53 if(it->first=="") 54 continue; 55 cout<<left; 56 cout<<setw(10)<<it->first; 57 cout<<setw(10)<<it->second; 58 cout<<" "; 59 if(i%10==0) 60 // cout<<'\n'; 61 printf("\n"); 62 } 63 cout<<'\n'; 64 return 0; 65 }
效能分析的时候,我也当我把vc的代码粘贴到vs里面发下需要调一下程序,我改了两个vs里面的设置,具体没截图,很难受,分析结果如下:
1 cup使用百分比
我在网上看的是摘要(S) 还有函数详细信息(D)
结果如下
二 要求 0 以战争与和平 作为输入文件,重定向(我觉得老师写错了)由文件系统读入连续三次运行,给出每次消耗时间,cpu参数。
1
2
3
要求一
我觉得这段代码可以优化
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 while(fgets(text,1024,fp)!=NULL) 2 { 3 // puts(text); 4 i=0; 5 while(text[i]!='\0') 6 { 7 char s[30]; 8 int j=0; 9 while((text[i]>='a'&&text[i]<='z')||(text[i]>='A'&&text[i]<='Z')) 10 { 11 if(text[i]>='A'&&text[i]<='Z') 12 text[i]+='a'-'A'; 13 s[j++]=text[i++]; 14 } 15 s[j]='\0'; 16 if(my_map[s]==0) 17 n++; 18 my_map[s]++; 19 if(text[i]=='\0') break; 20 else 21 i++; 22 } 23 24 }
可以把fgets()函数里面的数值变小,减小数组的存储空间
主函数由98.05%变成了97.76%
要求2
通过profile找出程序的瓶颈。给出程序运行中最花费时间的三个函数(或代码片段)。要求包括截图。
我认为这三个函数最花费时间25853,此三个函数运行时间长,花费cpu多。
要求3
根据瓶颈,“”尽力而为“”地优化程序性能
这个不会改进
要求4
再次profile,给出在要求1中花费时间的三个函数此时的花费,要求包括截图。
花费了25140秒
要求 5
程序运行时间,根据在教师的机器上运行的速度排名,分为三档。此题得分,第一档20分,第二档10分,第三档5飞,功能测试不能通过的,0分