大文本数据合并
有这样几个3、400M的文本,结构如下:
产品名称 单价 数量 总价
xxx x n x
……
后面很多,且各文本中相互间产品名称有重复的,重复就要对数量和总价进行相加,
因为每个文本的数据量太大没法读入内存处理,请高手指点。。。。
还有,不能用数据库
[解决办法]
List<Product> table = new List<Product>();class Product{ public string name; public decimal price; public int count; private Product() { } public Product(string name, decimal price, int count) { this.name = name; this.price = price; this.count = count; }}
[解决办法]
数据量那么大,List<>的膨胀速度确实会很惊人。不行就自己简单地分一下页?
比如每读取5K行就汇总一次,把汇总结果存入一个中间文件,比如temp1.txt。然后再读下一个5K行,依此循环。
最后再对temp1.txt、temp2.txt这些中间文件进行二次汇总。
这么大数据量,不用数据库,真的很麻烦。
[解决办法]
"最重要的是List<Product> table = new List<Product>();装不下合并的结果,没处理完就显示内存溢出了"
LZ,分两个步骤:
1、用HashTable,哈希表的空间伸缩范围要大。
2、遍历文本同时,进行计算处理,不能先装,在合并,这样消耗内存太大了!
如果哈希表都不能解决你的问题,建议先把文本导入到数据库中,在进行处理,毕竟数据库伸缩的空间比内存要大多了。。。。