作业总结续
2012-09-25 21:22
197 查看
经过一天的优化和测试后,我深刻的感觉到我的上篇总结实在是天真幼稚了。所以特此补续,总结经验教训。
今天遇到的最大的问题是内存管理的问题。
在之前的简单样例中,这本不是一个问题,但是当我今天换了一个100多MB的文件夹当样例后,一切都不一样了。
我的简简单单的9KB的程序居然调用了1.2G的内存长达4分钟,而其他同学的程序大约调用内存100MB以内。
如上图占用内存1316MB
经过分析我发现我的内存主要是存在于存储中。
for(...)
{
Word a = new Word(str[i], str[i].ToLower(), 1);
wordlist.Add(a);
}
就是以上的代码占用了1.2G的内存。
我无条件的存储了所有的单词,包括了完全一样重复的(我想要先全部存储,再处理,这样不用检索时间)。
对于这么大的文件量统计出的所有单词,每个单词建立一个对象存储入List集合中,自然也就会占用大量内存。
而其他的同学会判断是否存在相同的,如果不同才重新建立对象存入。
那么我又有了一个问题,如果检索判断,那么对于每个单词都在List中需要一个O(n)的检索历程。
所以继而引发的是数据结构的问题了,List中检索太慢,我就换成了Hashtable,实现O(1)的检索。
这样改变后,由于重复对象在存储前已经合并,占用内存大大降低,时间也节约了不少。
如下图时间降为77秒:(样本也降低了不少)
如上图内存占用降为67MB
所以软件工程与以前的程序不同,需要考虑大样本,不仅要考虑到运行时间还要考虑到内存调用。
今天遇到的最大的问题是内存管理的问题。
在之前的简单样例中,这本不是一个问题,但是当我今天换了一个100多MB的文件夹当样例后,一切都不一样了。
我的简简单单的9KB的程序居然调用了1.2G的内存长达4分钟,而其他同学的程序大约调用内存100MB以内。
如上图占用内存1316MB
经过分析我发现我的内存主要是存在于存储中。
for(...)
{
Word a = new Word(str[i], str[i].ToLower(), 1);
wordlist.Add(a);
}
就是以上的代码占用了1.2G的内存。
我无条件的存储了所有的单词,包括了完全一样重复的(我想要先全部存储,再处理,这样不用检索时间)。
对于这么大的文件量统计出的所有单词,每个单词建立一个对象存储入List集合中,自然也就会占用大量内存。
而其他的同学会判断是否存在相同的,如果不同才重新建立对象存入。
那么我又有了一个问题,如果检索判断,那么对于每个单词都在List中需要一个O(n)的检索历程。
所以继而引发的是数据结构的问题了,List中检索太慢,我就换成了Hashtable,实现O(1)的检索。
这样改变后,由于重复对象在存储前已经合并,占用内存大大降低,时间也节约了不少。
如下图时间降为77秒:(样本也降低了不少)
如上图内存占用降为67MB
所以软件工程与以前的程序不同,需要考虑大样本,不仅要考虑到运行时间还要考虑到内存调用。
相关文章推荐
- 作业十二 总结
- 个人作业3——个人总结(Alpha阶段)
- 个人作业3——个人总结(Alpha阶段)
- 个人作业3——个人总结(Alpha阶段)。
- 个人作业3-个人总结(Alpha阶段)
- 个人作业3——个人总结(Alpha阶段)
- 个人作业3——个人总结(Alpha阶段)
- 个人作业3——个人总结(Alpha阶段)
- 个人作业3——个人总结(Alpha阶段)
- 作业九 总结
- C语言第三次作业总结
- 17秋 软件工程 个人作业 软件工程实践总结作业
- C语言程序设计(基础)最后一次作业-- 总结报告
- C 语言学习 第三次作业总结
- 第一次个人作业总结
- 作业九 ——报告及总结
- 广商14级软件工程团队作业:助教总结
- C语言最后一次作业--总结报告
- 作业九:总结
- C语言最后一次作业--总结报告