日期:2014-05-17  浏览次数:20754 次

C#中几个百度不到的疑惑
1、对于循环,for,foreach等,哪个更快?比如循环个几百万次,哪个快?

2、对于数组,Array,ArrayList,List,string []等,哪个在循环读数据的时候快?

另外问一个(实际碰到的问题,也可能是我电脑问题?),写了个简单的小程序,功能:将任意一个文件转存为2进制显示的文本(当我无聊吧),由于转成2进制以后文本挺大的,打开费劲,于是给存成10份,用了10个线程,但是发现功能虽然实现了,耗时还是那么多,比如原来存1个文本,只有1个线程(防止界面假死用的),转存文件耗时15秒,现在把文件分成10份,用了10个线程,时间居然还是15秒,不是应该快很多吗?

------解决方案--------------------
转一个字节写一次文件?s=s+x?
用StringBuilder或者MemoryStream啊
------解决方案--------------------
如果你非要10架马车并排走单行道,虽然你的策略很好,可惜这个策略最底层与硬件的接口部分其实是单行道。
------解决方案--------------------
1,之前有一种说法是:索引数组用for快,集合数组用foreach快,未验证过,楼主可以试试。
2,如果纯遍历,没有附加开销,并且有索引,是最快的方式。
3,涉及到IO的话,性能瓶颈就不定是CPU内存还是硬盘了。
------解决方案--------------------
3. 请参考Amdahl定律. 在一个有n个处理器(核心)的机器上,一个任务的不可并行化部分为p,(视整个工作量为1,0<p<=1),那么并行化的最大收益比率为1/(p+(1-p)/n). 当n趋近于无穷大的时候,性能增益将趋近于1/p

在实际的机器上,处理器数目有限,再加上线程调度的开销,实际性能增益是达不到理论值的