我使用以下函数将对象转换为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 comparing XML folder data
从我可以看到它看起来它显示除了最后一个文件夹中的一些文件之外的所有内容。我猜这只是运气不好而且它在搜索结束时达到了最大长度。
XML序列化功能上的100MB上限还是在这里有其他的东西?
答案 0 :(得分:1)
基于linked question的代码,问题实际上是下游:
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文档建议使用within a Using statement中的StreamWriter。我也这样做。)