Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法读取网络共享文件夹的大文件_C#_Asp.net_Text Files - Fatal编程技术网

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

C# 无法读取网络共享文件夹的大文件,c#,asp.net,text-files,C#,Asp.net,Text Files,我正在尝试读取文本文件,以检查所有行的列数是否相同。在本地代码中,它可以正常工作,但在网络共享文件夹(与所有人一样拥有权限)中,它只适用于较小大小(5mb)的文件,当我选择10 MB或500 MB的文件时,相同的代码不起作用(不起作用意味着需要一些时间,但几分钟后页面就会刷新,就是这样)。它没有给出任何错误或显示任何消息。下面是读取文件并获取列数的代码 LinesLst = File.ReadLines(_fileName, Encoding.UTF8) .Select((line, i

我正在尝试读取文本文件,以检查所有行的列数是否相同。在本地代码中,它可以正常工作,但在网络共享文件夹(与所有人一样拥有权限)中,它只适用于较小大小(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();    
LinesLst=File.ReadLines(_文件名,Encoding.UTF8)
.选择((行、索引)=>
{
var count=line.Split(分隔符).Length;
if(NumberOfColumns<0)
NumberOfColumns=计数;
还新
{
行=行,
计数=计数,
索引=索引
};
})
.Where(colCount=>colCount.count!=NumberOfColumns)
.Select(colCount=>colCount.line).ToList();

也许您在大文件上有
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();
不折不扣

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;

我添加了AsyncPostBackTimeout=“36000”,解决了我的问题。

“它没有给出任何错误或显示任何消息”-这确实不太可能。如果您碰巧使用Windows,事件日志中将出现错误。。。否则,请使用一些日志库来捕获和记录错误。是否有任何方法可以提高代码的性能,因此,由于文件很大(500 MB),因此过程会更快?如果没有错误消息,您如何知道它不起作用?你确定没有耗尽内存吗?很难做出巨大的性能改进,因为仅仅读取文件将是主要的瓶颈。我将支持@AlexeiLevenkov,您需要对这段代码进行更多的分析,并更好地描述它是如何工作的。您所说的“不工作”是什么意思?它只是没有反应吗?如果没有异常,可能是调用
ToList()
导致您等待的时间比预期的要长,尤其是对于网络共享。如果您只是在项目上迭代,会发生什么?