【发布时间】:2013-11-20 09:09:33
【问题描述】:
我想随机化包含超过 3200 万行 10 位字符串的文件中的行。我知道如何使用File.ReadAllLines(...).OrderBy(s => random.Next()).ToArray() 执行此操作,但这不是内存效率,因为它将所有内容加载到内存中(超过 1.4GB)并且仅适用于 x64 架构。
另一种方法是拆分它并随机化较短的文件,然后合并它们,但我想知道是否有更好的方法来做到这一点。
【问题讨论】:
-
所有行的长度都相同吗?这会让事情变得更容易......
-
如果只执行'ReadAllLines'而不使用OrderBy,会使用多少内存?这已经太多了吗?
-
@ThomasLevesque 是的,所有行的大小都相同。
-
@Baldrick 是的,无论 OrderBy 是什么,都会发生这种情况
-
.OrderBy(s => random.Next())不保证会终止。OrderBy子句中的函数应该提供总排序。见blogs.msdn.com/b/ericlippert/archive/2011/01/20/…
标签: c# performance memory file-io