TextWriter的有效使用

本文关键字:有效 TextWriter | 更新日期: 2023-09-27 18:20:29

是否有其他方法可以执行操作:

textWriter.Write(myBigObject.ToString())

这样:

  • myBigObject被"流式传输"到文本表示中,而不在内存中创建整个字符串对象
  • 除了myBigObjecttextWriter之外,没有使用其他类或对象

示例:假设myBigObject有50个字符串字段。如果可以一个接一个地将字符串写入文件,那么将所有这些字段连接到一个大字符串中,然后将对象写入文件是没有意义的。

TextWriter的有效使用

如果您有权访问代码,您可以向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().

要复杂得多