2013-04-04 19 views
1

我在Flex应用程序中遇到内存泄漏。 Flex应用程序是大型Web应用程序的一部分(其中包含各种技术)。Flex应用程序中的内存泄漏

当Flex应用程序每5秒从服务器调用一次刷新轮询时,会发生内存泄漏。

事实是:

  • 我使用的AMFChannel进行连接。投票是错误的。每刷新一次会创建新的实例。
  • 服务器端是BlazeDS,作为我的web应用程序中的servlet运行。
  • 内存泄漏发生在IEFireFox。它根本不会发生在Chrome
  • 过了一个晚上,IE内存增加了数百MB,最终崩溃。
  • 在Flex中,内存增加但速度要慢得多。过夜它会增加30MB。
  • 使用Flex配置文件我看到增加的内存与 的AMFChannels有关。
  • 我试图设置AMFChannel requestTimeout到60秒。它什么都没做。
  • 我试图设置BlazeDS connect-timeout-seconds到60秒。没有改变。但我不确定我是否做得正确。

我的结论至今有:

  • 的的AMFChannel实际上是获得来自浏览器的连接。在Flex中,AMFChannel消耗一小部分内存,而在浏览器中消耗更多。这解释了Flex应用程序和IE之间消耗内存的不同。
  • 不知何故,AMFChannel没有关闭,也没有垃圾收集。

我的请求:

  • 是我的结论是正确的?
  • 如何确保AMFChannel已关闭并清理干净?
  • 客户端上的连接实例是否由BlazeDS(在服务器端)控制?
  • 任何其他线索来帮助我继续调查这个问题

感谢

回答

0

像所有的对象,在某些时候指针需要被宣布无效,使其符合GC。使用AMFChannel对象,最好的方法是为channelDisconnectchannelFault事件设置监听器。如果您有对该实例的类成员引用,则可以将这两个事件处理程序中的任何一个声明为空。

要确定您是否应该从客户端调用断开连接,您可以查看shouldBeConnected和connected的属性。

+0

感谢您的回复。如果AMFChannel在Flex中不是免费的,它是否会导致IE上的连接对象熬夜? – 2013-04-04 13:56:42

+0

我手动添加断开呼叫到每个活动超过1分钟的每个RemoteObject。它看起来像Flex内存是稳定的,但IE内存继续增长。 – 2013-04-04 14:25:48