我正在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