【发布时间】:2011-03-07 12:17:24
【问题描述】:
var fileList = Directory.GetFiles("./", "split*.dat");
int fileCount = fileList.Length;
int i = 0;
foreach (string path in fileList)
{
string[] contents = File.ReadAllLines(path); // OutOfMemoryException
Array.Sort(contents);
string newpath = path.Replace("split", "sorted");
File.WriteAllLines(newpath, contents);
File.Delete(path);
contents = null;
GC.Collect();
SortChunksProgressChanged(this, (double)i / fileCount);
i++;
}
对于包含 ~20-30 大行(每行 ~20mb)的文件,当我执行 ReadAllLines 方法时,我有 OutOfMemoryException。为什么会引发此异常?我该如何解决? 附言我在 MacOS 上使用 Mono
【问题讨论】:
-
那么不要ReadAllLines,一次读一行?虽然 20mb 行很疯狂:/
-
我必须实现外部排序并向我的老师展示它适用于比我的 RAM 更大的文件。而且我认为对于仅包含 200-300 行且每行为 20 mb 的文件,排序算法会更快。
-
它是什么类型的数据?如果您只读取每行的前 x 个字符并按这些字符进行排序,那么您的排序是否足够?
-
每个文件 20-30 或 200-300 行?
-
好吧,我们在这里告诉你,你走上了一条死路。该文件是故意设计的,因此这不起作用;)
标签: c# .net mono out-of-memory