您的位置:首页 > 其它

第三次作业-效能分析

2017-09-26 13:27 309 查看
以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。

运行截图:





连续三次运行截图:

第一次运行:







消耗时间:4.3s CPU<20%

第二次运行:







消耗时间:5s CPU<20%

第三次运行:







消耗时间:4.5s CPU<20%

给出你猜测程序的瓶颈。你认为优化会有最佳效果,或者在上周在此处做过优化 (或考虑到优化,因此更差的代码没有写出) 。

foreach (string key in arrayList)
{
//keyArray[index] = key;
keyArray[index] = Convert.ToString(key);
valueArray[index] = Convert.ToInt32(hashtable[key]);
index++;
}


此处使用了排序递归算法,可以使程序快速的进行下去。

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



函数1

static void Main(string[] args)
{
bool flag = true;
while (flag)
{
Console.WriteLine();
Console.WriteLine("效能分析输入1");
string choice = Console.ReadLine();
switch (choice)
{

case "1":
string[] files = Directory.GetFiles("..\\..\\essay\\");
foreach (string f in files)
{
Console.WriteLine(f);
FileUtil file3 = new FileUtil();
file3.CountEachWord(f, 3);
}
break;

}

}
}


函数2

public void CountEachWord(string url, int choice)
{
int count = 0;
StreamReader streamReader = new StreamReader(url);
string line;
Regex regex = new Regex(@"\b[A-Za-z]+[A-Za-z0-9]*");
while ((line = streamReader.ReadLine()) != null)
{

MatchCollection matchCollection = regex.Matches(line);
foreach (Match word in matchCollection)
{
string words = word.ToString();
if (hashtable.Contains(words))
{
int j = Convert.ToInt32(hashtable[words]) + 1;
hashtable[words] = j;
}
else
{
hashtable.Add(words, 1);
}
}
}
count = hashtable.Keys.Count;
Console.WriteLine("total: " + count);
Console.WriteLine();
streamReader.Close();
SortHashtable(hashtable, choice);

}


函数3

private void QuickSort(int[] valueArray, string[] keyArray, int v1, int v2)
{
if (v1 < v2)
{
int index2 = Division(valueArray, keyArray, v1, v2);
QuickSort(valueArray, keyArray, index2 + 1, v2);
QuickSort(valueArray, keyArray, v1, index2 - 1);
}
}


函数大多调用了C#中定义好的函数,所以运行起来会使程序变慢。

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





git地址: https://git.coding.net/ZhangEJ/wf.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: