【发布时间】:2016-01-16 02:30:12
【问题描述】:
我有一个 asp.net 网页,它使用 Jquery 自动完成功能通过在每个字段上使用 class="cur" 来显示许多文本框(超过 75 个文本框)上的选项列表。
我注意到,在 IE 9-11 中每次刷新页面时,内存每次都会增加 3-5Mb(甚至更多)。一旦达到 250,000K 或更多,性能就会受到影响,一切都会变慢很多(需要几秒钟来输入文本框,刷新等)
如果我从页面中取出自动完成,那么它工作正常(几乎不会增加 IE 的内存)。
所以我假设内存泄漏是由于 jquery 自动完成功能而发生的。
在我正在使用的 jquery 代码下方找到(我已经缩短了货币选项的数量)。
那么问题来了,如何在使用 jquery 自动完成时避免内存泄漏?
更新:请注意,我在 Sys.Application.add_load(function () 中有 jquery 脚本,因为它只运行第一次回发,之后所有自动完成功能都将停止工作。
Sys.Application.add_load(function () {
$('.cur').each(function () {
var currencies = [
{ value: 'USA dollar', data: 'USD' },
{ value: 'European euro', data: 'EUR' },
{ value: 'South African rand', data: 'ZAR' },
{ value: 'Mexican peso', data: 'MXN' },
{ value: 'Japanese yen', data: 'JPY' },
{ value: 'Indian rupee', data: 'INR' },
{ value: 'Indonesian rupiah', data: 'IDR' },
{ value: 'Chinese renminbi', data: 'CNY' },
{ value: 'Canadian dollar', data: 'CAD' },
{ value: 'Brazilian real', data: 'BRL' },
{ value: 'Australian dollar', data: 'AUD' },
{ value: 'New Zealand dollar', data: 'NZD' },
{ value: 'Afghan afghani', data: 'AFN' },
{ value: 'Albanian lek', data: 'ALL' },
{ value: 'Vietnamese dong', data: 'VND' },
...many more currencies
{ value: 'Yemeni rial', data: 'YER' },
{ value: 'Zambian kwacha', data: 'ZMK' },
{ value: 'Zimbabwean dollar', data: 'ZWD' },
];
var txt = $(this);
txt.autocomplete({
source: currencies,
delay: 0,
minLength: 0,
select: function (event, ui) { $(this).val(ui.item.data); return false },
change: function (event, ui) { $(this).trigger("change") }
}).bind('focus', function () {
$(this).autocomplete("search");
})
});
}
【问题讨论】:
-
1-.包括您如何测量内存足迹。 2-引用“每次刷新页面”是F5刷新,请为我清除。 3-。你说它不会在 chrome 中发生?...如果您刷新整页会发生什么...在开发人员选项中禁用 IE 中的缓存,看看会发生什么。 4- 您可以将这些更改为 ajax 调用而不是嵌入的页面变量,这将大大缩短页面加载时间并减少页面内存占用。
-
感谢您的反馈。刷新我的意思是回发。每次我按下 gridview 行、更新记录等时。我在 IE11 中使用开发者工具,现在包括一个内存选项卡来检查可能的内存泄漏等。它也发生在 Firefox 中(我无权访问铬合金)。我无法进行整页刷新(使用 F5?),因为这会因各种原因使页面停止工作并且需要再次登录。在 IE 中禁用捕获已经开启。更改 ti ajax 调用将花费我更长的时间(重新编程),我希望找到一个更简单的解决方案。谢谢。
-
进一步,请注意,我更新了我的问题,其中包含有关 Sys.Application.add_load(function () { 中的 jquery 脚本的更多信息。如果不是,则只运行一次。以防万一与此有关。
-
+1 的问题,因为我也面临 jQuery 自动完成泄漏内存问题。我使用了 IE-11 开发工具 msdn.microsoft.com/en-us/library/dn255003(v=vs.85).aspx 并在关闭后留下了更多的内存和对象。
标签: jquery asp.net performance internet-explorer autocomplete