我正在尝试读取文本文件以检查所有行是否具有相同的列数。在本地代码中,它工作正常,但在网络共享文件夹(具有Everyone权限),它只适用于小尺寸(5mb)的文件,当我选择10 MB或500 MB文件相同的代码不工作(不工作意味着) ,这需要一些时间,但几分钟后页面会刷新,就是这样)。它没有给出任何错误或显示任何消息。下面是读取文件并获取列数的代码
LinesLst = File.ReadLines(_fileName, Encoding.UTF8)
.Select((line, index) =>
{
var count = line.Split(Delimiter).Length;
if (NumberOfColumns < 0)
NumberOfColumns = count;
return new
{
line = line,
count = count,
index = index
};
})
.Where(colCount => colCount.count != NumberOfColumns)
.Select(colCount => colCount.line).ToList();
答案 0 :(得分:0)
也许你在大文件上有OutOfMemoryException
。事实是,在每次迭代的代码中创建了许多对象:line.Split
的字符串数组和匿名对象。同时,实际上不需要匿名对象。我会重写代码:
LinesLst = File.ReadLines(_fileName, Encoding.UTF8)
.Where(line =>
{
var count = line.Split(Delimiter).Length;
if (NumberOfColumns < 0)
NumberOfColumns = count;
return count != NumberOfColumns;
})
.ToList();
此外,您可以尝试在调用line.Split
时删除字符串数组的创建。尝试替换字符串
var count = line.Split(Delimiter).Length;
到字符串
// Assume that Delimiter is char[]
var count = line.Count(c => Delimiter.Contains(c)) + 1;
// Assume that Delimiter is char
var count = line.Count(c => Delimiter == c) + 1;
答案 1 :(得分:0)
我添加了AsyncPostBackTimeout =&#34; 36000&#34;这解决了我的问题。