我该如何解决System.OutOfMemoryException'

时间:2014-03-21 19:16:05

标签: wcf visual-studio windows-services

我有一个Windows服务应用程序。这是一个非常繁忙的应用程序。它应该不断寻找要做的事情。运行一段时间后我得到了

类型的异常' System.OutOfMemoryException'被扔了。

它可能发生在不同的时间,但通常是这一段:

私有共享函数GetUnprocessedQueue()As Boolean

    Try



        Dim l_svcOOA As New svcITGOOA.IsvcITGOOAClient(OOAProcessing.cGlobals.EndPoint_ITGOOA)
        Dim l_iFilter As New svcITGOOA.clsFilter

        With l_svcOOA

            With l_iFilter


                .FilingType = OOAProcessing.cGlobals.FilingType

            End With
            m_ReturnClass = .itgWcfOOA(1, cGlobals.DatabaseIndicator, svcITGOOA.eOOAAction.GetUnprocessedQueue, l_iFilter, 71)
            Return CompletedGetUnprocessedQueue(m_ReturnClass)
        End With


    Catch ex As Exception
        ExceptionHandling(ex, "GetUnprocessedQueue " & m_Application)
        Return False
    End Try
End Function

这是使用wcf服务来读取队列。它每隔两分钟读取一次队列,看看是否已添加新记录。

请帮我解决这个问题。我不知道从哪里开始。

2 个答案:

答案 0 :(得分:0)

当GC完成一个收集周期但即使在此之后内存不可用时,也会发生OutOfMemoryException异常。我无法弄清楚上面的代码片段是做什么的,但我认为对对象使用弱引用可能很有用。

答案 1 :(得分:0)

我有一个在我设置的同一段落中生成的计时器

例如

 m_svcTimer = New Timers.Timer With {.Interval = m_Interval, .Enabled = True}
        AddHandler m_svcTimer.Elapsed, AddressOf StartTheQueueIfTime
        m_svcTimer.Enabled = True
        m_svcTimer.Start()

在StartTheQueueIfTime段落内。我认为这将是一种改变时间间隔的方法。相反,它不断创造新的事件。最后太多导致了我的崩溃。

鲍勃