【发布时间】:2014-07-16 08:59:35
【问题描述】:
我有一个文本文件,内容如下:
01 Dir1
abcd
efg
hij
klm
nop
qrs
tuv
wxy
zab
yxw
vut
dcb
02 Dir2
abcd
efg
hij
klm
nop
qrs
tuv
wxy
zab
yxw
vut
dcb
我得到一个通过读取文件创建的数组:
string[] lines = File.ReadAllLines(path);
这给了我一个包含所有条目的数组,包括空条目。
文本文件背后的想法是有一个文件夹和该文件夹中的文件在它后面。因此,“01 Dir1”是一个文件夹,之后的每一行直到一个空行都是一个文件。
我正在尝试的是有一个数组列表,因此从上面的示例中,列表中将有两个数组,一个从“01 Dir1”开始到空条目,下一个从“02 Dir2”到结束。
我可以遍历初始数组并为每个单独的目录创建列表,但是还有其他方法吗?
这种方法的问题在于,它最终会在内存中的不同集合中拥有相同的数据,一个来自 ReadAllLines 数组,另一个来自它的 subs。
【问题讨论】:
-
你不能只在空间上分割吗?
-
The problem with that approach is that it will end up having the same data in different sets in memory, one from the ReadAllLines array and other the subs from it.... 为什么这是个问题?当对象超出范围时,垃圾收集器将获取您不再需要的对象。 -
但是如果你不希望
ReadAllLines的结果在单个数组中,那么不要使用它。还有其他读取文本文件的方法,您可以自定义文件的读取方式。 -
@psubsee2003 在这里不能依赖 GC。如果条目更多怎么办。您的第二条评论没有帮助。
-
@psubsee2003 问题不仅仅是一个对象被 GCed。数组需要连续的内存块,很容易导致内存不足的异常。