【问题标题】:How do I solve 'System.OutOfMemoryException'如何解决“System.OutOfMemoryException”
【发布时间】:2014-03-21 19:16:04
【问题描述】:

我有一个 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 服务来读取队列。它每两分钟读取一次队列,看看是否有新记录添加到其中。

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

【问题讨论】:

  • 是否需要处置这些对象? (即他们是否实现了 IDisposable?)
  • 我不知道如何判断它们是否需要处理。

标签: wcf visual-studio windows-services


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    例如

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

    鲍勃

    【讨论】:

      猜你喜欢
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 2018-01-03
      • 2013-11-11
      相关资源
      最近更新 更多