Individual Project 总结(二)——优化总结

本文分享了使用Visual Studio 2012内置的Performance Analyzer Tool对WordCounter.exe进行CPU采样分析的经验,针对耗时最长的函数进行优化,并探讨了不同分词线程数量对程序性能的影响。通过实验,最终将分词线程数量调整为3,以提高程序效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用visual studio 2012内置的performance analysis tool对编译得到的wordcounter.exe文件进行cpu采样分析。测试数据为大小为92.4mb的文件夹,得到采样图:

可以发现,耗时最长的函数分别为String.SplitInternal(),String.ToLower(),JIT_MonReliableEnter(线程得到锁)以及字典类的findEntry()操作,让人意外的是,加锁操作耗时竟然大于字典类操作....分词操作耗时最长,对于此处的优化,可以考虑采用自己的split函数实现。下面考虑调整分词统计线程的数目,看看不同的线程数对结果有何影响。

对于统计一个大小在100mb左右的文件夹,得到如下结果

分词线程数10,运行时间15秒

分词线程数5,运行时间13秒

分词线程数3,运行时间11秒

分词线程数1,运行时间16秒

不同的分词线程数目对程序性能有较大影响,根据比对,将程序分词线程数目调整为3.

 

以上是本次作业在性能优化方面的一些心得,之前,我只用过java开发过多线程程序,C#下的多线程编程尚不熟练,这次作业,性能调优花费了我很大的时间(2h),但也得到了并发程序设计的基本经验。目前我在看《Java Concurrency in Practice》,其实Java与C#在很多层面是相通的,至少是在语言层面,但是,对于两者虚拟机(HotSpot与JIT)的内存模型的联系与区别,我尚不了解。同时,我对C#的ConcurrentDictionary类也不了解,它同Java下的同名类的实现实现手段的区别尚不清楚,今后需要多加学习。

转载于:https://www.cnblogs.com/yinpc/archive/2012/10/11/2719252.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值