提问人:codingdave 提问时间:11/5/2015 最后编辑:svickcodingdave 更新时间:11/5/2015 访问量:397
读取和加载的语义差异
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()
由于我希望我的程序具有一致的命名,该程序涉及从持久性存储和更高级别的函数中获取文件,这些函数还初始化,交叉引用和错误检查,因此恳请您提供意见。
答:
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 是有效的示例
下一个:实现糖语法
评论