`
cuisuqiang
  • 浏览: 3956212 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3666759
社区版块
存档分类
最新评论

关于DWR内存泄漏的问题

    博客分类:
  • JS
阅读更多

机器跑了一晚上,发现有崩溃现象,由于页面内有动态绘图功能,我怀疑是绘图原因,但是今天上午有人提醒我才想到,是不是间隔调用时DWR产生了内存泄漏问题?

 

网上查了一下貌似大家都在讨论这个问题,之前我也挺老手说过DWR有内存问题,可是没有遇到过。原来DWR在间隔调用这种情况下会有问题!

 

按照大家的说法,修改engine.js配置文件来解决问题,目前我也修改了一下,修改方法如下:

dwr.engine._sendData = function(batch) {}

 

内有,这样几行代码:

// Get setup for XMLHttpRequest if possible
if (batch.rpcType == dwr.engine.XMLHttpRequest) {
if (window.XMLHttpRequest) {
  batch.req = new XMLHttpRequest();
}
// IE5 for the mac claims to support window.ActiveXObject, but throws an error when it's used
else if (window.ActiveXObject && !(navigator.userAgent.indexOf("Mac") >= 0 && navigator.userAgent.indexOf("MSIE") >= 0)) {
  batch.req = dwr.engine._newActiveXObject(dwr.engine._XMLHTTP);
}
}

 

看起来IE请求Ajax的对象每次都在创建

而根据网上的说法,IE在创建对象后,如果这个页面不关闭(包括不能最小化)时,其创建的对象是一直不销毁的。那么无限制的创建对象且不销毁,当然会内存泄漏

 

目前我改了一下,如下面代码:

var httprequest = null;
// Get setup for XMLHttpRequest if possible
if(null==httprequest){
	// Get setup for XMLHttpRequest if possible
	if (batch.rpcType == dwr.engine.XMLHttpRequest) {
		if (window.XMLHttpRequest) {
			httprequest = new XMLHttpRequest();
		}
		// IE5 for the mac claims to support window.ActiveXObject, but throws an error when it's used
		else if (window.ActiveXObject && !(navigator.userAgent.indexOf("Mac") >= 0 && navigator.userAgent.indexOf("MSIE") >= 0)) {
			httprequest = dwr.engine._newActiveXObject(dwr.engine._XMLHTTP);
		}
	}
}

 

就是说第一次创建,之后不再创建,相当于单例模式。

由于内存泄漏时长时间运行引起的,目前尚不知该方法是否能解决问题。但是从任务管理器上看,好像有所改善,我们还需要进一步测试。

后面我会告诉大家测试结果,如果大家有其他说法和解决方案,请及时留言,不胜感激!

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

1
1
分享到:
评论

相关推荐

    DWR内存兼容及无法调用问题解决方案

    在上次遇到DWR内存泄漏问题后根据网上的内容对JS文件进行修改,修改后发现还有一些兼容的问题,同时还出现不能调用的一些情况。 而且根据统计DWR就算内存泄漏,也不是特别严重,除非你一个浏览器跑几天不关闭,而且...

    dwr 实例(MyEclipse开发,包括dwr所用jar包)

    - **安全考虑**:由于DWR直接暴露了服务器端方法,因此需要注意安全问题,避免敏感信息泄露。 5. **DWR的应用场景** - **实时数据更新**:例如股票价格、天气预报等实时信息的展示。 - **表单验证**:在用户输入...

    DWR 2.0M3 学习笔记

    10. **最佳实践**:了解如何编写高效的DWR代码,避免内存泄漏,合理使用批处理,以及如何优化JavaScript和Java代码以提升整体性能。 阅读"DWR学习笔记.doc"文件将有助于系统地掌握这些知识点,通过实践操作加深理解...

    DWR.xml配置文件说明书(含源码)

    在访问量比较大的情况下,可以不用担心发生内存泄露的情况. 配置一个creator的创建和远程方法调用设置: ... 上面的配置信息表示将java.util.date提供给客户端调用,并且引用名称是Blash.当你在客户端调用...

    dwr后台推送

    ScriptSession是DWR用于跟踪客户端会话的机制,但如果不正确地使用或管理,可能会导致内存泄漏或其他性能问题。这个文件中的讨论可能提供了如何避免这些问题的解决方案。 总的来说,DWR后台推送技术通过长连接或者...

    dwr实现服务器推技术,兼容低版本IE

    - 定期清理连接,防止内存泄漏。 综上所述,DWR提供了一种有效的途径,使得即使在低版本的IE浏览器中,也能实现服务器推送和页面无刷新的数据实时获取。理解并熟练掌握DWR的原理和应用,对于开发高效、实时的Web...

    dwr实例及简单文档

    10. **最佳实践**:学习如何在实际项目中有效利用DWR,如合理设计接口、避免内存泄漏、优化数据传输等,这些都是提升应用性能的关键。 通过对这个压缩包的学习,你不仅可以掌握DWR的基本用法,还能深入理解Ajax技术...

    DWR开发步骤相关整理

    - 注意管理JavaScript内存,避免因过多的DWR调用导致内存泄漏。 - 使用AJAX调用时,确保考虑页面状态和用户交互,避免造成混乱。 理解并掌握以上DWR开发步骤,你就能有效地利用DWR创建高性能、互动性强的Web应用...

    java网页聊天室

    如使用线程池处理并发请求,避免内存泄漏,以及对用户输入进行验证和过滤,防止XSS、CSRF等攻击。 8. **数据库存储**:聊天记录通常需要持久化存储,以便用户可以查看历史消息。这涉及到数据库的设计和操作,包括...

    java和JavaScript开发细节

    同时,在处理事件解绑时也要小心,确保不会留下内存泄漏的风险。 2. **跨域会话安全:** 在使用DWR(Direct Web Remoting)框架时,可以通过配置`web.xml`中的`crossDomainSessionSecurity`参数来增强安全性。将该值...

    使用了2年Struts开发项目后的总结

    但是,要防止内存泄漏,需要正确管理ActionForm的生命周期,特别是在大型应用中,考虑使用Session范围之外的FormBean。 Ajax技术在Struts中也发挥了重要作用,通过DWR(Direct Web Remoting)或jQuery的Ajax库,...

    iOS开发之详谈属性设置readwrite、readonly、retain、copy、assign、nonatomic

    这通常用于非Objective-C对象(如C标量类型),以避免内存泄漏或循环引用问题。 3. `retain`:setter方法会释放旧值,并对新值执行retain操作,增加其引用计数。这样可以确保对象在赋值后不会立即被销毁。当一个...

Global site tag (gtag.js) - Google Analytics