还是合并两本词典,和上次不同的是,其中一本体积很大,有几个G,担心内存可能不够,用文件来保存中间结果。性能当然一落千丈,这是意料之中的,I/O操作和内存操作没法比。但是,性能尽管差,也要尽量优化,控制在一个可接受的范围内。折腾了半天,最后在我2009年的老机器上运行了一个多小时处理完了,还算可以接受。
体会到几点:
1.字符串操作,如IndexOf,Substring都很费时间,尤其是当字符串比较大时(如几兆),应尽量避免。哪怕多读写几次文件,都比这种操作性能好。比如,与其读入一个很大的文件,然后在字符串里找东西,不如把大文件拆分成几个小文件,每个要找的东西存成一个文件。
2.一个文件夹下文件不宜过多。我的老机器上,一个文件夹下文件数量控制在2000个,感觉性能还行。
3.缓存可以提高性能,但是需要很小心,很容易出bug。而且,缓存的刷新也需要I/O操作,搞的不好,刷新过于频繁,比不用性能还差。
虽然主要是用文件保存中间结果,但也用了内存作为缓存,达到一定大小后再写到文件。到底用多少内存作为缓存比较合适,这个没有仔细调试,只是随便分配了几百兆而已。