相关疑难解决方法(0)

使用C#中的流读取大型文本文件

我有一个很好的任务,就是如何处理大型文件被加载到我们应用程序的脚本编辑器中(就像我们用于快速宏的内部产品的VBA一样).大多数文件大约300-400 KB,这是很好的加载.但是当它们超过100 MB时,这个过程很难(正如你所期望的那样).

发生的事情是将文件读取并推入RichTextBox然后导航 - 不要过于担心这部分.

编写初始代码的开发人员只是使用StreamReader并且正在执行

[Reader].ReadToEnd()
Run Code Online (Sandbox Code Playgroud)

这可能需要很长时间才能完成.

我的任务是打破这段代码,将其以块的形式读入缓冲区并显示一个带有取消选项的进度条.

一些假设:

  • 大多数文件将是30-40 MB
  • 文件的内容是文本(非二进制),有些是Unix格式,有些是DOS.
  • 一旦检索到内容,我们就可以找出使用的终结符.
  • 一旦加载了在richtextbox中渲染所需的时间,没有人会担心.这只是文本的初始加载.

现在提问:

  • 我可以简单地使用StreamReader,然后检查Length属性(so ProgressMax)并为set缓冲区大小发出Read并在后台worker 中的while循环WHILST中迭代,这样它就不会阻塞主UI线程?然后在完成后将stringbuilder返回到主线程.
  • 内容将转到StringBuilder.如果长度可用,我可以用流的大小初始化StringBuilder吗?

这些(在您的专业意见中)是好主意吗?我过去曾经有一些问题从Streams读取内容,因为它总会错过最后几个字节或者其他东西,但如果是这样的话,我会问另一个问题.

.net c# stream streamreader large-files

89
推荐指数
9
解决办法
18万
查看次数

如何在C#中执行SHA1文件校验和?

如何使用SHA1CryptoServiceProvider()文件创建文件的SHA1校验和?

.net c# checksum sha1

59
推荐指数
3
解决办法
4万
查看次数

Console.WriteLine很慢

我浏览了数百万条记录,有时我必须使用调试Console.WriteLine来查看发生了什么.

但是,Console.WriteLine速度非常慢,比写入文件慢得多.

但它非常方便 - 有没有人知道加速它的方法?

c# performance

24
推荐指数
5
解决办法
2万
查看次数

C#超大字符串操作(内存不足)

我需要从磁盘读取1gb原始文本文件到ram以在C#中进行一些字符串操作.

string contents = File.ReadAllText(path)
Run Code Online (Sandbox Code Playgroud)

抛出内存异常(不出所料)

最好的方法是什么?

c# string file-io

17
推荐指数
2
解决办法
2万
查看次数

使用Json.net将大型数据列表作为JSON格式流式传输

使用MVC模型,我想编写一个JsonResult,它将Json字符串流式传输到客户端,而不是立即将所有数据转换为Json字符串,然后将其流回客户端.我有动作需要发送非常大(超过300,000条记录)作为Json传输,我认为基本的JsonResult实现不可扩展.

我正在使用Json.net,我想知道是否有一种方法来流式传输Json字符串的块.

//Current implementation:
response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(Data, formatting));
response.End();

//I know I can use the JsonSerializer instead
Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();
serializer.Serialize(textWriter, Data);
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何将块写入textWriter并写入响应并调用reponse.Flush()直到所有300,000条记录都转换为Json.

这有可能吗?

c# asp.net-mvc json json.net

8
推荐指数
1
解决办法
9110
查看次数