StringReader还是Memory Stream哪个更加资源友好?

3
我有一个模块,需要负责解析通过网站接口从不同用户处接收到的CSV数据,并且我需要解析这个CSV。我正在考虑使用 TextFieldParser 来完成它。
但在实施之前,我在考虑哪种方法更好...
  1. 从接收到的数据生成 MemoryStream,
  2. 或者从同样的输入字符串初始化一个 StringReader
哪种方法更好,为什么?

有一个类似的问题,使用 DataContractSerializer,我很好奇哪个更有效:using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(xml))) 还是 using (var backing = new StringReader(xml)) using (var reader = XmlReader.Create(backing)) - Cœur
1个回答

3

选项1根本不会给你一个字符串,所以如果你想使用字节数组和缓冲区进行操作,可以采用这种方式,但这似乎不太可能。如果你正在进行字符串处理,我强烈推荐使用选项2,因为你可以一次读取一行。

就我所见,使用MemoryStream的唯一原因是,如果你需要做一些StringReader不能满足你要求的更复杂的工作(否则你就是在重复造轮子):编码、奇怪的行格式等。

通过StringReader处理非常大的文件(特别是CSV文件)时,我从来没有遇到过问题。我敢打赌,当微软设计StringReader来完成你所要做的工作时,他们使它尽可能地节省资源。


我必须将这个新对象传递给接受流或文本读取器的TextFieldParser,我正在寻找一种资源高效的方法来完成这个操作,不需要重新发明轮子! :) - Rajeev
在这种情况下,不要使用任何一个,直接将文件名传递给 TextFieldParser,就像 MSDN 文档中所述:http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx#Y1795 - Kieren Johnstone
有一个需求是直接通过粘贴到文本区域中传递数据,而不需要上传文件...为了在那里传递文件名,我不得不将其保存到服务器上的某个临时文件中,因此我正在寻找其他选项...但现在我认为可以做到! - Rajeev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接