【问题标题】:.NET Remoting memory leak?.NET Remoting 内存泄漏?
【发布时间】:2010-04-18 13:02:56
【问题描述】:

我有一个作为单身人士的远程处理类

<configuration>
   <system.runtime.remoting>
      <application>
         <service>
            <wellknown 
               mode="Singleton" 
               type="PTSSLinkClasses.PTSSLinkClientDesktopRemotable, PTSSLinkClasses" 
               objectUri="PTSSLinkDesktop" />
         </service>
         <channels>
            <channel ref="http" port="8901"/>
         </channels>
      </application>
   </system.runtime.remoting>
</configuration>

它是在“服务器”服务中创建的。 另一个客户端服务使用这个远程对象。 客户端使用计时器(轮询)(用于测试)每 0.5 秒调用一次远程对象

如果服务器服务停止,远程对象不可用,客户端服务的内存使用量不断增加......

我已经覆盖 InitialLifetimeService 以返回 null

public override Object InitializeLifetimeService()
        {
            return null;
        }

如果远程对象不可用,.net 是否会将该对象的所有调用请求排队???直到所有的内存都用完? 如何检测远程对象不可用并停止尝试调用远程方法?

【问题讨论】:

    标签: c# .net remoting .net-remoting


    【解决方案1】:

    .NET Remoting 不会对远程对象的调用进行排队。当远程对象不再可用并且您对其调用方法时,您应该收到一个异常(WebException,RemotingException),即找不到请求的服务。

    我认为您的问题出在其他地方。也许您忽略了代码中可能出现的异常并且没有正确处理它。

    您是再次使用同一个计时器来调用远程对象,还是每 0.5 秒创建一个新计时器来调用远程对象?

    【讨论】:

    • 另外,不要被您测量内存的方式以及垃圾收集在 .NET 中的工作方式所迷惑。可能只是没有垃圾收集发生或有任何东西要收集。内存泄漏可能有各种来源,我强烈建议阅读 .NET 内存和垃圾收集。
    猜你喜欢
    • 2011-03-22
    • 2012-02-19
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多