我正在ASP.Net中创建一个Ajax客户端控件。从IScriptControl继承,然后添加相关的JavaScript类(它将继承自一个javascript控件)。我已经找到了内存泄漏下面的代码:Ajax客户端控制 - 内存泄漏
Type.registerNamespace("mynamespace");
myClass = function (element) {
myClass.initializeBase(this, [element]);
}
myClass.prototype = {
initialize: function() {
myClass.callBaseMethod(this, 'initialize');
var me = this;
$(document).ready(function() {
me._initializeControl();
me._hookupEvents();
});
},
dispose: function() {
//Add custom dispose actions here
myClass.callBaseMethod(this, 'dispose');
},
//...other code ...
_hookupEvents: function() {
var me = this;
var e = this.get_element();
$("#viewRates", e).click(function() {
me.openDialog();
});
},
//...other code...
myClass.registerClass('myClass', Sys.UI.Control);
if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
_hoookupEvents是我的JavaScript文件中的函数。泄漏与me.openDialog行相关。如果我删除这条线,就没有泄漏。然而,我需要这一行能够从类中调用一个函数(我不能只在函数中使用'this',因为它会引用该按钮)。有一个更好的方法吗?或者,我可能只需要在dispose函数中调用一些方法来清理这些东西?
您是如何检测到泄漏的?你有没有泄漏的物体或元素的想法? –
使用Chrome开发人员工具 - 堆快照。如果我离开那行代码,我可以看到有2个myclass实例(当我做回发时)。我删除了代码行......并且只有一个实例(即使在几次回发之后)。 –
我想你的意思是回发是用UpdatePanel完成的。 – Aristos