无法读取网络共享文件夹的大文件

时间:2016-06-08 05:40:11

标签: c# asp.net text-files

我正在尝试读取文本文件以检查所有行是否具有相同的列数。在本地代码中,它工作正常,但在网络共享文件夹(具有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();    

2 个答案:

答案 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;这解决了我的问题。