如何在使用完成后清除/垃圾收集局部variables值

嗨,我试图导入一个巨大的数据。 其大约8GB有更多的53K文件。 我想要的是一次导入一个文件,完成其使用,然后删除/删除或垃圾收集caching。

我知道当我们使用delete关键字时,它只删除obj实例的引用。 删除或使variables值为nullundefined不起作用。

这是我的代码。

 fs.readdir(dirname, (err, filenames) => { if (err) { onError(err); return; } _.forEach(filenames, (file) => { if (!!~file.indexOf('.json')) { this.synchronize(() => { let currentFile = require(`${dirname}${file}`); return new Promise((resolve, reject) => { setTimeout(() => { //assume am done working with the data imported in variable currentFile here. now i want to delete it. resolve('Done'); }, 1) }) }) } }); }); 

我尽可能使caching空,但没有成功。 完成后,有没有办法清除当前的文件?

或者可能是如何调整我的代码,以实现function,它将工作的文件夹中的任何数量的文件。

任何帮助将不胜感激

我看到你的代码有两个大问题:

  1. require是能够加载一个JSON文件,但是主要的问题是,它正在同步做,所以你不能正确使用node.js的asynchronous性质,这就是为什么不build议使用要求为dynamic文件, require是意味着应用程序初始化的内在原因它使用caching机制在你的情况下是无用的,这会减慢你的应用程序。
  2. 以这种方式加载和处理所有文件是非常耗费资源的,您应该使用stream API重构您的体系结构,这是stream可以发光的用例。

解决您的问题的一种方法是将以下内容放入资源中:

  1. JSONStream npm模块
  2. fs.createReadStreamfs模块

这个想法是迭代你已经做的目录中的所有文件,然后为每个文件创build一个读取stream,然后pipe道JSONStream.parse它以这种方式将获得巨大的内存。

你不能明确地告诉垃圾收集器释放一个对象。 一旦垃圾收集器意识到没有更多的对象引用,对象就会被销毁。 要做到这一点,你必须确保所有对该对象的引用都被删除。 只要至less有一个引用,对象将留在内存中。

当你解决承诺的时候, currentFile不再被引用,并最终被垃圾收集。