TextWriter的有效使用
本文关键字:有效 TextWriter | 更新日期: 2023-09-27 18:20:29
是否有其他方法可以执行操作:
textWriter.Write(myBigObject.ToString())
这样:
myBigObject
被"流式传输"到文本表示中,而不在内存中创建整个字符串对象- 除了
myBigObject
和textWriter
之外,没有使用其他类或对象
示例:假设myBigObject
有50个字符串字段。如果可以一个接一个地将字符串写入文件,那么将所有这些字段连接到一个大字符串中,然后将对象写入文件是没有意义的。
如果您有权访问代码,您可以向MyBigObject
添加一个方法,该方法接受一个TextWriter
并写出每个属性。例如:
public class MyBigObject
{
public void Write(TextWriter writer)
{
writer.Write(bigStringField1);
writer.Write(bigStringField2);
// etc.
}
}
如果MyBigObject
的子类需要编写自己的表示,那么使方法成为虚拟的,并且子类调用基类中的实现。
如果您不拥有代码,并且字段是通过属性公开的,那么您可以构建一个适配器类,该类接受MyBigObject并写出每个属性。您也可以构建一些做同样事情的扩展方法。
如果无法访问源代码,可以使用反射来检查对象上的字段,获取每个字段的值,并从每个值的ToString()
表示中提取Write()
。然而,反射比直接场访问慢,并且它涉及更多的中间对象。我不知道在你的情况下使用反射是否值得。
鉴于您概述的限制,这是不可能的。您必须想出一种方法来从对象中读取数据,并一次将其写在char/byte/line上。
如果你想循环遍历你的属性并一次写出一个,那么使用反射是可能的。然而,我怀疑走这条路会比原来的解决方案使用更多的内存,而且比简单调用.ToString().