Read和Load的语义差异

时间:2015-11-05 07:37:52

标签: c# linq language-agnostic programming-languages

我想知道 Read Load 之间的语义差异(在C#中)。比较例如,我没有看到区别。

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

vs

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

由于我希望对我的程序进行一致的命名,只需从持久存储和更高级别的函数中获取文件,这些函数也会初始化,交叉引用和错误检查,我请求您提供输入。

2 个答案:

答案 0 :(得分:5)

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

有异常ReadAllText(),实际上确实一次读取所有数据。但这是一种类型,其中所有其他表现相似的方法也使用“Read”一词。在该上下文中使用“Read”使API保持一致,并且未能使用“Load”并不会显着妨碍对API的理解(特别是因为方法名称也明确指出“所有文本”...没有人会惊讶地看到所有在那种情况下阅读的文本,对吗?:))。

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

答案 1 :(得分:3)

阅读API是关于:

  • 以较小的单位读取数据,如字节,字符
  • 有一个指针,它主要是仅向前类型,如DataReader
  • 连接并从源头阅读
  • 适用于所有类型的数据,但如果在一段时间内保持实时连接,则可能是一种代价高昂的选择
  • 整个过程中需要一致的连接
  • ADO.Net连接架构就是一个例子

在另一端加载API:

  • 一次性将所有数据加载到内存中
  • 打开连接,读取所有内容并关闭它,不保持实时连接
  • 可以使用数据来应用逻辑,在内存中向前/向后移动
  • 适用于较小的设备,由于内存和网络要求,可能会因较大的数据集而出现问题
  • 一旦加载并且可以在一段时间内作为断开连接的数据方便地进行处理
  • ADO.Net断开架构,数据集,DataTable和IEnumerable是有效示例