在VB.net中使用的XmlSerializer中的内存泄漏

时间:2014-09-02 04:25:27

标签: vb.net memory-leaks xmlserializer

在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)

多数民众赞成改善了泄漏,但这是正确的做法吗?对我而言,似乎我正在每次调用重新创建缓存?

0 个答案:

没有答案