机器跑了一晚上,发现有崩溃现象,由于页面内有动态绘图功能,我怀疑是绘图原因,但是今天上午有人提醒我才想到,是不是间隔调用时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
相关推荐
在上次遇到DWR内存泄漏问题后根据网上的内容对JS文件进行修改,修改后发现还有一些兼容的问题,同时还出现不能调用的一些情况。 而且根据统计DWR就算内存泄漏,也不是特别严重,除非你一个浏览器跑几天不关闭,而且...
- **安全考虑**:由于DWR直接暴露了服务器端方法,因此需要注意安全问题,避免敏感信息泄露。 5. **DWR的应用场景** - **实时数据更新**:例如股票价格、天气预报等实时信息的展示。 - **表单验证**:在用户输入...
10. **最佳实践**:了解如何编写高效的DWR代码,避免内存泄漏,合理使用批处理,以及如何优化JavaScript和Java代码以提升整体性能。 阅读"DWR学习笔记.doc"文件将有助于系统地掌握这些知识点,通过实践操作加深理解...
在访问量比较大的情况下,可以不用担心发生内存泄露的情况. 配置一个creator的创建和远程方法调用设置: ... 上面的配置信息表示将java.util.date提供给客户端调用,并且引用名称是Blash.当你在客户端调用...
ScriptSession是DWR用于跟踪客户端会话的机制,但如果不正确地使用或管理,可能会导致内存泄漏或其他性能问题。这个文件中的讨论可能提供了如何避免这些问题的解决方案。 总的来说,DWR后台推送技术通过长连接或者...
- 定期清理连接,防止内存泄漏。 综上所述,DWR提供了一种有效的途径,使得即使在低版本的IE浏览器中,也能实现服务器推送和页面无刷新的数据实时获取。理解并熟练掌握DWR的原理和应用,对于开发高效、实时的Web...
10. **最佳实践**:学习如何在实际项目中有效利用DWR,如合理设计接口、避免内存泄漏、优化数据传输等,这些都是提升应用性能的关键。 通过对这个压缩包的学习,你不仅可以掌握DWR的基本用法,还能深入理解Ajax技术...
- 注意管理JavaScript内存,避免因过多的DWR调用导致内存泄漏。 - 使用AJAX调用时,确保考虑页面状态和用户交互,避免造成混乱。 理解并掌握以上DWR开发步骤,你就能有效地利用DWR创建高性能、互动性强的Web应用...
如使用线程池处理并发请求,避免内存泄漏,以及对用户输入进行验证和过滤,防止XSS、CSRF等攻击。 8. **数据库存储**:聊天记录通常需要持久化存储,以便用户可以查看历史消息。这涉及到数据库的设计和操作,包括...
同时,在处理事件解绑时也要小心,确保不会留下内存泄漏的风险。 2. **跨域会话安全:** 在使用DWR(Direct Web Remoting)框架时,可以通过配置`web.xml`中的`crossDomainSessionSecurity`参数来增强安全性。将该值...
但是,要防止内存泄漏,需要正确管理ActionForm的生命周期,特别是在大型应用中,考虑使用Session范围之外的FormBean。 Ajax技术在Struts中也发挥了重要作用,通过DWR(Direct Web Remoting)或jQuery的Ajax库,...
这通常用于非Objective-C对象(如C标量类型),以避免内存泄漏或循环引用问题。 3. `retain`:setter方法会释放旧值,并对新值执行retain操作,增加其引用计数。这样可以确保对象在赋值后不会立即被销毁。当一个...