Read 和 Load 的语义差异
Semantic difference of Read and Load
我想知道 Read 和 Load(在 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()
因为我希望我的程序有一个一致的命名,它处理很多简单地从持久存储中获取文件和更高级别的函数,这些函数也初始化、交叉引用和错误检查,所以我恳请您提供意见。
在您的示例中,"Read" 通常是指读取数据的 部分 。这是为了限制需要存储的数据量 and/or 在给定操作中处理,还是因为数据本身不是立即可用的(例如 Console.Read()
或从网络流),基本行为是相同的:数据被处理成比可以或将要处理的整个数据集更小的片段。
有一个例外ReadAllText()
,它实际上一次读取了所有数据。但这是一种类型,其中所有其他执行类似的方法也使用单词 "Read"。在该上下文中使用 "Read" 可使 API 保持一致,不使用 "Load" 不会显着妨碍对 API 的理解(特别是因为方法名称还明确指出 "All Text"…在那种情况下看到所有的文本都不会让人感到惊讶,对吧?:)).
在您使用 "Load" 的示例中,它们会一次性消耗所有数据,并将其转换为其他内容,例如XML DOM 或程序集。这是一种与仅读取数据和最多对其进行最少处理(例如解码某些文本格式)的操作截然不同的操作。与 "Read" 操作相比,"Load" 将始终消耗所有数据,而不是允许选择一次只读取一部分。
阅读 API 是关于:
- 以字节、字符等更小的单位读取数据
- 有一个指针,主要是前向类型,如 DataReader
- 已连接并从源读取
- 适用于所有类型的数据,但如果在一段时间内保持实时连接,则可能是一个成本高昂的选择
- 在整个过程中需要一致的连接
- ADO.Net 连接架构就是示例
在另一端加载 API:
- 一次加载内存中的所有数据
- 打开连接,读取所有内容并关闭它,不保持实时连接
- 可以使用数据来应用逻辑,在内存中向前/向后移动
- 适用于较小的数据集,但由于内存和网络要求,可能无法处理较大的数据集
- 加载后,可以在一段时间内作为断开连接的数据方便地使用
- ADO.Net 断开连接的架构、Dataset、DataTable 和 IEnumerable 是有效示例
我想知道 Read 和 Load(在 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()
因为我希望我的程序有一个一致的命名,它处理很多简单地从持久存储中获取文件和更高级别的函数,这些函数也初始化、交叉引用和错误检查,所以我恳请您提供意见。
在您的示例中,"Read" 通常是指读取数据的 部分 。这是为了限制需要存储的数据量 and/or 在给定操作中处理,还是因为数据本身不是立即可用的(例如 Console.Read()
或从网络流),基本行为是相同的:数据被处理成比可以或将要处理的整个数据集更小的片段。
有一个例外ReadAllText()
,它实际上一次读取了所有数据。但这是一种类型,其中所有其他执行类似的方法也使用单词 "Read"。在该上下文中使用 "Read" 可使 API 保持一致,不使用 "Load" 不会显着妨碍对 API 的理解(特别是因为方法名称还明确指出 "All Text"…在那种情况下看到所有的文本都不会让人感到惊讶,对吧?:)).
在您使用 "Load" 的示例中,它们会一次性消耗所有数据,并将其转换为其他内容,例如XML DOM 或程序集。这是一种与仅读取数据和最多对其进行最少处理(例如解码某些文本格式)的操作截然不同的操作。与 "Read" 操作相比,"Load" 将始终消耗所有数据,而不是允许选择一次只读取一部分。
阅读 API 是关于:
- 以字节、字符等更小的单位读取数据
- 有一个指针,主要是前向类型,如 DataReader
- 已连接并从源读取
- 适用于所有类型的数据,但如果在一段时间内保持实时连接,则可能是一个成本高昂的选择
- 在整个过程中需要一致的连接
- ADO.Net 连接架构就是示例
在另一端加载 API:
- 一次加载内存中的所有数据
- 打开连接,读取所有内容并关闭它,不保持实时连接
- 可以使用数据来应用逻辑,在内存中向前/向后移动
- 适用于较小的数据集,但由于内存和网络要求,可能无法处理较大的数据集
- 加载后,可以在一段时间内作为断开连接的数据方便地使用
- ADO.Net 断开连接的架构、Dataset、DataTable 和 IEnumerable 是有效示例