作业2

一   对本周作业中的功能4(仅由文件重定向读入,不由控制台输入)做效能分析

               

               因为我是用c语言写的代码,所以重定向不难 只需要用freopen(“”文件路径“”,“”读写方式“”,"stdin")来做。结束的时候不要忘了fclose()就可以,例子如截图

                               

              我个人认为效能分析是程序对cpu和内存占用的综合参数,完成这个功能真的很坎坷,我没做过测试,我做的功能是使用c++实现的,所以我下的是vc,我查了一下测试用vs,所以我下了个vs2012,花了我2个小时,安装的时候已经十点多了,晚上十二点还没有装完,所以我没有关机,早上发现没安装成功,心里非常烦躁。我早上6点就起来了。然后我又下了个vs2015这次下载3个小时,唯一感到庆幸的安装成功了。我上网百度了下怎么效能分析,操作如下 。

                            1 单击分析按钮

                                2性能向导打钩

                                3 选择cpu采样

这样就开始进行了效能测试。

运行程序

 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
");
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]!='')
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]='';
37             if(my_map[s]==0)
38             n++;
39             my_map[s]++;
40             if(text[i]=='') break;
41             else
42             i++;
43         }
44          
45     }
46     fclose(fp);
47     map<string,int>::iterator it;
48     printf("

");
49 //    printf(">wf  -s  test.txt
");
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<<'
';
61       printf("
");
62     }
63     cout<<'
';  
64     return 0;
65 }
View Code

 

效能分析的时候,我也当我把vc的代码粘贴到vs里面发下需要调一下程序,我改了两个vs里面的设置,具体没截图,很难受,分析结果如下:

1    cup使用百分比

  

我在网上看的是摘要(S)  还有函数详细信息(D)

结果如下   

二  要求 0 以战争与和平 作为输入文件,重定向(我觉得老师写错了)由文件系统读入连续三次运行,给出每次消耗时间,cpu参数。

1  

 

2

3

   

要求一

 我觉得这段代码可以优化

 1 while(fgets(text,1024,fp)!=NULL)
 2     {
 3 //        puts(text);
 4         i=0;
 5         while(text[i]!='')
 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]='';
16             if(my_map[s]==0)
17             n++;
18             my_map[s]++;
19             if(text[i]=='') break;
20             else
21             i++;
22         }
23          
24     }
View Code

可以把fgets()函数里面的数值变小,减小数组的存储空间

主函数由98.05%变成了97.76%

 要求2

                   通过profile找出程序的瓶颈。给出程序运行中最花费时间的三个函数(或代码片段)。要求包括截图。

                                    

我认为这三个函数最花费时间25853,此三个函数运行时间长,花费cpu多。

要求3

根据瓶颈,“”尽力而为“”地优化程序性能

这个不会改进

要求4

再次profile,给出在要求1中花费时间的三个函数此时的花费,要求包括截图。

花费了25140秒

要求 5

程序运行时间,根据在教师的机器上运行的速度排名,分为三档。此题得分,第一档20分,第二档10分,第三档5飞,功能测试不能通过的,0分

17计算机技术 田继平
原文地址:https://www.cnblogs.com/tianjiing/p/7592695.html