Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Internet Explorer中使用JavaScript,如何在不刷新页面的情况下清除内存?_Javascript_Ajax_Internet Explorer_Memory_Memory Management - Fatal编程技术网

在Internet Explorer中使用JavaScript,如何在不刷新页面的情况下清除内存?

在Internet Explorer中使用JavaScript,如何在不刷新页面的情况下清除内存?,javascript,ajax,internet-explorer,memory,memory-management,Javascript,Ajax,Internet Explorer,Memory,Memory Management,我有一个基于AJAX的网站,在客户端使用JavaScript。站点上的某些操作会缓存浏览器中服务调用的大型结果集(即数百兆字节)。这些都是一次性的结果。它们将被查看一小段时间,然后需要从内存中清除 我编写了一个小测试站点,它在内存中加载了一堆垃圾,然后调用JavaScript的delete方法。这在Firefox中非常有效(内存几乎会立即返回)。Internet Explorer 8(尚未尝试7)在刷新或关闭页面之前不会释放内存 有人知道如何使用JavaScript/Ajax(无页面刷新)降低I

我有一个基于AJAX的网站,在客户端使用JavaScript。站点上的某些操作会缓存浏览器中服务调用的大型结果集(即数百兆字节)。这些都是一次性的结果。它们将被查看一小段时间,然后需要从内存中清除

我编写了一个小测试站点,它在内存中加载了一堆垃圾,然后调用JavaScript的
delete
方法。这在Firefox中非常有效(内存几乎会立即返回)。Internet Explorer 8(尚未尝试7)在刷新或关闭页面之前不会释放内存

有人知道如何使用JavaScript/Ajax(无页面刷新)降低IE的内存使用率吗

下面是我的客户机代码示例:

function load() {
 var x = ['dfjasdlfkjsa;dflkjsad;flkjsadf;lj'];

 for( var i = 0; i < 10000000; ++i ) {
  x.push('asdfasfasfsfasdfkasjfslafkjslfjsalfjsaldfkjasl;dfkjsadfl;kjsdflskajflskfjslakfjaslfkjsaldfkjsaldfksdfjk');
 }

 alert('deleting');   // <--- memory usage around 500mb
 delete x;            // <--- immediate results in Firefox 3.5 (not IE8)
 alert('done');
}
函数加载(){
var x=['dfjasdlfkjsa;dflkjsad;flkjsadf;lj'];
对于(变量i=0;i<10000000;++i){
x、 push('asdfasfasfsfasdfkasjfslafkjslfjsalfkjsl;dfkjsadfl;kjsdflskajflskfjslakfjaslfkjsaldfksdjk');
}

警报('deleting');//不要使用delete方法,而是将变量设置为
null
。这似乎是跨浏览器清除内存的最佳方法(
delete
是出了名的古怪)。它的工作原理与我的另一个答案相同


alert('deleting');//不要使用delete方法,而是将变量设置为
null
。这似乎是跨浏览器清除内存的最佳方法(
delete
是出了名的古怪)。它的工作原理与我的另一个答案相同


alert('deleting');//如果您尝试“x=null;”而不是delete?

如果您尝试“x=null;”而不是delete?

只需将null分配给变量:

x = null;

只需将null赋值给变量:

x = null;

我知道您提到的数据是丢弃的,但是,当您删除节点时,即使只是将x设置为null,您也需要确保没有任何事件处理程序附加到任何节点,否则无法对该节点进行垃圾收集

以下是我在自己的代码中使用的函数:

我知道您提到的数据是丢弃的,但是,当您删除节点时,即使只是将x设置为null,您也需要确保没有任何事件处理程序附加到任何节点,否则无法对该节点进行垃圾收集

以下是我在自己的代码中使用的函数:

IE(从技术上讲,是JScript)有,这可能会迫使垃圾收集器立即运行。你可能想玩这个,但根据我的经验,
null
ing引用在大多数情况下就足够了。

IE(从技术上讲,是JScript)has,它应该是强制垃圾收集器立即运行。您可能想使用它,但根据我的经验,
null
在大多数情况下调用引用就足够了。

但是如果我有多个变量指向同一个对象呢?null只会终止单个引用。是的,您是是的,如果是这样的话,因为delete操作符在IE上不太好用,你可以取消你创建的所有对象引用,这是一个有缺陷的垃圾收集器的代价…如果可以,鼓励你的用户使用一个好的浏览器:-)但是如果我有多个变量指向同一个对象呢?Null只会终止单个引用。是的,你是对的,如果是这样的话,因为delete操作符在IE上工作得不太好,你可以将你创建的所有对象引用都置为Null,这就是有一个有缺陷的垃圾收集器的代价……如果可以,鼓励你的用户使用一个好的浏览器:-)但是当e我有多个变量指向同一个对象?Null只会终止单个引用。@j0rdan当你对一个对象有多个引用时,垃圾收集器显然不会对该对象进行垃圾收集,直到所有引用都被捕获为存在。
Null
't可用于垃圾收集,下次GC运行时可以清除。但是如果我有多个变量指向同一个对象,该怎么办?Null只会终止单个引用。@j0rdan当您对一个对象有多个引用时,垃圾收集器显然不会垃圾收集该对象,直到所有引用都被删除为止对一个对象的所有引用进行赋值只会让GC知道该对象可用于垃圾收集,并且可以在下次GC运行时清除