| 发表于:2007-01-24 14:03:4810楼 得分:0 |
其实不管分多少块只要超过1块,那么最后的io记录总数都是4n, 所以在这里分成10和分成5分成100都一样,但是分得越细需要的内存最少但需要的额外操作也越多(比如创建文件的io操作)这里需要取一个合理的值,上面说的5个有点偏小了,其实可以更多.理论上,理想状态下(只有io操作费时间,其他操作都是假设瞬间完成), 应该是总记录数开平方.就是假设文件里有一亿行记录,分开成1万个文件是最省内存的,而且总的读写操作也一样是4n (不过多了10000次创建文件的操作..) 为什么是开平方呢,因为这样可以使前面分组时的内存比较和后面循环读取时的比较的规模一样大,最大限度节约了内存,如果分再细,在后面循环读取时会费更多内存,分再少,则前面费更多内存. 但是具体情况毕竟不是理想状态,还要根据比较算法的耗时和其他具体上下文环境来判断.但有一点是肯定的就是主要矛盾是在io操作上,在其他地方去追求极致也不如io省点,其他地方多花点,毕竟写内存比写硬盘快1000倍. | | |
|