读取和加载的语义差异

Semantic difference of Read and Load

提问人:codingdave 提问时间:11/5/2015 最后编辑:svickcodingdave 更新时间:11/5/2015 访问量:397

问:

我想知道 ReadLoad(在 C# 中)之间的语义区别是什么。例如,在比较时我看不出有什么区别

  • System.IO.MemoryStream.Read()
  • System.Console.Read()
  • System.IO.StreamReader.Read()
  • System.IO.File.ReadAllText()

  • System.Xml.XmlDocument.Load()
  • System.Xml.Linq.XDocument.Load()
  • System.Reflection.Assembly.Load()

由于我希望我的程序具有一致的命名,该程序涉及从持久性存储和更高级别的函数中获取文件,这些函数还初始化,交叉引用和错误检查,因此恳请您提供意见。

与 C# LINQ 语言无关的 编程语言

评论


答:

5赞 Peter Duniho 11/5/2015 #1

在您的示例中,“读取”通常是指读取部分数据。这是为了限制在给定操作中需要存储和/或处理的数据量,还是因为数据本身不能立即完整地使用(例如 或从网络流读取),基本行为是相同的:数据被处理成比可以或将要处理的整个数据集更小的片段。Console.Read()

有一个例外,它实际上一次读取所有数据。但是,在这种类型的类型中,所有其他执行类似的方法也使用“读取”一词。在该上下文中使用“Read”可使 API 保持一致,不使用“Load”不会显著妨碍对 API 的理解(特别是因为方法名称还明确指出了“所有文本”......在这种情况下,看到所有阅读的文本,没有人会感到惊讶,对吧?:) ).ReadAllText()

在使用“Load”的示例中,它们一次使用所有数据,并将其转换为其他内容,例如XML DOM或程序集。这与仅仅读取数据并最多对其进行最少的处理(例如解码某些文本格式)截然不同。与“读取”操作相比,“加载”将始终消耗所有数据,而不是允许一次只读取一部分。

评论

0赞 codingdave 11/6/2015
这个答案非常简洁,紧凑,易于阅读,似乎非常精确。我感谢您的结论性总结,并将其标记为公认的答案。
3赞 Mrinal Kamboj 11/5/2015 #2

读取 API 是关于:

  • 以较小的单位(如字节、字符)读取数据
  • 有一个指针,它主要是像 DataReader 这样的只进类型
  • 连接并从源读取
  • 适用于所有类型的数据,但如果在一段时间内保持实时连接,则可能是一个昂贵的选择
  • 在整个过程中需要一致的连接
  • ADO.Net 互联架构就是一个例子

在另一端加载 API:

  • 一次性加载内存中的所有数据
  • 打开连接,读取所有内容并关闭它,不保持实时连接
  • 可以处理数据来应用逻辑,在内存中向前/向后移动
  • 适用于较小的数据集,但由于内存和网络要求,对于较大的数据集可能会遇到麻烦
  • 一旦加载,就可以在一段时间内方便地处理,因为它是一个断开连接的数据
  • ADO.Net 断开连接的体系结构中,Dataset、DataTable 和 IEnumerable 是有效的示例