ASP.net C#:如何使用File.ReadLines(fileName).GetEnumerator()
发布时间:2020-12-16 07:40:38 所属栏目:asp.Net 来源:网络整理
导读:我们正在尝试使用以下代码. public static int SplitFile(string fileName,string tmpFolder,Liststring queue,int splitSize = 100000) { int chunk = 0; if (!Directory.Exists(tmpFolder)) Directory.CreateDirectory(tmpFolder); using (var lineIterato
我们正在尝试使用以下代码.
public static int SplitFile(string fileName,string tmpFolder,List<string> queue,int splitSize = 100000) { int chunk = 0; if (!Directory.Exists(tmpFolder)) Directory.CreateDirectory(tmpFolder); using (var lineIterator = File.ReadLines(fileName).GetEnumerator()) { bool stillGoing = true; for (chunk = 0; stillGoing; chunk++) { stillGoing = WriteChunk(lineIterator,splitSize,chunk,tmpFolder,queue); } } return chunk; } private static bool WriteChunk(IEnumerator<string> lineIterator,int splitSize,int chunk,List<string> queue) { try { //int tmpChunkSize = 1000; //int tmpChunkInc = 0; string splitFile = Path.Combine(tmpFolder,"file" + chunk + ".txt"); using (var writer = File.CreateText(splitFile)) { queue.Add(splitFile); for (int i = 0; i < splitSize; i++) { if (!lineIterator.MoveNext()) { return false; } writer.WriteLine(lineIterator.Current); } } return true; } catch (Exception) { throw; } } 它创建了大约36个文本文件(大约800 MB),但是在lineIterator.MoveNext()创建第37个文件时开始抛出“Out of memory exception”. 而lineIterator.Current显示调试器中的值. 解决方法
因为它是一个巨大的文件,你应该读它BinaryReader的Seek和ReadBytes方法.
您可以看到一个简单的示例here.使用ReadBytes检查最后一行后,并以您阅读的特定行数写入流程文件.不要写你读的每一行,也不要把所有的数据保存在内存中. 剩下的就在你手中. 也许真的是那个When does File.ReadLines free resources
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 会员资格,SimpleMembership,ASP.NET身份之间有什
- asp.net-mvc-4 – 将ASP.NET Core与旧版.Net Fra
- asp.net – 如何在Web / Windows窗体中将IronRub
- asp.net-core – 删除继承的ASP.NET Core appset
- asp.net – 设置debug =“false”时出现“请求超
- asp.net – 使用内部HTML与ASP:按钮?
- asp.net – SignalR/signalr/hubs 404未找到
- asp.net:response.redirect无法正常工作
- asp.net GridView吐出无效的HTML
- asp.net – / bin浏览时出现错误404
热点阅读