3

我正在使用以下函数将对象转换为 XML。

Public Shared Function SerializeObject(ByVal objToSerialize As Object) As String
    Dim objXML As New Xml.Serialization.XmlSerializer(objToSerialize.GetType) 
    Dim sw As New IO.StringWriter()
    objXML.Serialize(sw, objToSerialize)
    Return sw.ToString() 
End Function

我注意到输出文件在某个点被截断,这似乎是 100MB。你可以看到我在这个问题中使用的代码:Best method for comparison XML folder data

从我所见,它似乎显示了除最后一个文件夹中的几个文件之外的所有内容。我猜这只是运气不好,它在搜索结束时达到了最大长度。

是 XML 序列化功能的 100MB 上限还是这里有其他东西在起作用?

4

1 回答 1

1

根据链接问题的代码,问题实际上是下游:

Dim strObjects As String = SerializeObject(objFolder)
With New StreamWriter("Out Path")
    .Write(strObjects)
End With

您没有刷新流编写器。流编写器会自动缓冲一定数量的文本,然后一次全部发送(而不是读取一个字符,然后写入一个字符,这样的性能要低得多)。当您的代码退出时,缓冲区中仍有一些文本,但是在将对象写入文件之前,该对象已被释放并被垃圾收集。在释放对象之前,您必须显式刷新和/或关闭您的流。大多数人都喜欢两者都做,但关闭它就足够了。

尝试刷新流,问题应该得到解决:

Dim strObjects As String = SerializeObject(objFolder)
Using sr As StreamReader = New StreamReader("Out Path")
    sr.Write(strObjects)
    sr.Flush()
    sr.Close()
End Using 

(MSDN 文档建议在 Using 语句中使用 StreamWriter 。我也这样做。)

于 2013-09-17T18:49:46.133 回答