有效使用TextWriter

时间:2014-09-03 20:07:43

标签: c# .net performance

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

textWriter.Write(myBigObject.ToString())

这样:

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

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

2 个答案:

答案 0 :(得分:2)

如果您有权访问代码,则可以向MyBigObject添加一个方法TextWriter并写出每个属性。例如:

public class MyBigObject
{
    public void Write(TextWriter writer)
    {
        writer.Write(bigStringField1);
        writer.Write(bigStringField2);
        // etc.
    }
}

如果MyBigObject的子类需要编写自己的表示,那么使方法成为虚拟,子类调用基类中的实现。

如果您不拥有代码,并且通过属性公开字段,则可以构建一个接受MyBigObject并写出每个属性的适配器类。您还可以构建一些执行相同操作的扩展方法。

如果您无法访问源代码,可以使用反射来检查对象上的字段,获取每个字段的值,并Write()输出每个值的ToString()表示。但是,反射比直接字段访问慢,并且它涉及更多的中间对象。我不知道在你的情况下使用反射是否值得。

答案 1 :(得分:0)

鉴于您所概述的限制,这是不可能的。您必须想出一种方法来读取对象中的数据,并一次将其写入char / byte / line。

如果您希望能够遍历您的属性并一次写出一个属性,那么可以使用reflection进行此操作。但是我怀疑这条路线会导致使用比原始解决方案更多的内存,而且比简单的.ToString()调用要复杂得多。