C# 无法读取网络共享文件夹的大文件
我正在尝试读取文本文件,以检查所有行的列数是否相同。在本地代码中,它可以正常工作,但在网络共享文件夹(与所有人一样拥有权限)中,它只适用于较小大小(5mb)的文件,当我选择10 MB或500 MB的文件时,相同的代码不起作用(不起作用意味着需要一些时间,但几分钟后页面就会刷新,就是这样)。它没有给出任何错误或显示任何消息。下面是读取文件并获取列数的代码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
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()
导致您等待的时间比预期的要长,尤其是对于网络共享。如果您只是在项目上迭代,会发生什么?