在VB.net 2010中使用xmlSerializer时,我似乎有内存泄漏 下面的代码是一个函数的内容,它每20秒左右就会被调用一次 取消注释行' serializer.Serialize(writer,response)'看到内存使用率上升。
Using writer As New StreamWriter(fileName)
Dim request = invoker.CreateRequest()
Dim response = invoker.Invoke(authorization, request)
If Not response Is Nothing Then 'maybe token timeout
Dim serializer = New XmlSerializer(GetType(TResponse)) ', New XmlRootAttribute("TResponse"))
Try
' serializer.Serialize(writer, response)
Catch e As InvalidOperationException
Dim msg As String = "ERROR: Failed to serialize the response:" & vbCrLf & e.Message
AddToRtfEventLog(category.ToUpper & " DATA " & msg, Drawing.Color.Red)
End Try
serializer = Nothing
AddToStatus(Convert.ToString("Response saved as ") & fileName & vbCrLf, Drawing.Color.LightGray, True)
End If
Return response
End Using
从互联网阅读中,我收集这是VB xmlSerializer中的一个错误,可能的解决方案是以缓存方式使用它。不幸的是我不知道怎么做,所以我想知道是否有人可以帮助我。 首先,我是否正确地做到了(它工作正常,只是内存问题)和 其次,如果我,你能告诉我如何修复泄漏吗?
感谢
马尔科姆
第2-部分 在Jehof的帮助下,我现在有了以下缓存类: Public NotInheritable Class XmlSerializerCache 私人子新() 结束子 私有共享ReadOnly缓存为新字典(字符串,XmlSerializer)()
Public Shared Function Create(type As Type, root As XmlRootAttribute) As XmlSerializer
Dim key = [String].Format(CultureInfo.InvariantCulture, "{0}:{1}", type, root.ElementName)
If Not cache.ContainsKey(key) Then
cache.Add(key, New XmlSerializer(type, root))
End If
Return cache(key)
End Function
结束班
已用:
替换了这些电话 Dim xmlRootAttribute = New XmlRootAttribute("TResponse")
Dim serializer = XmlSerializerCache.Create(GetType(TResponse), XmlRootAttribute)
Try
serializer.Serialize(writer, response)
多数民众赞成改善了泄漏,但这是正确的做法吗?对我而言,似乎我正在每次调用重新创建缓存?