gpt4 book ai didi

javascript - 通过 CPU 交易 RAM(性能问题)

转载 作者:数据小太阳 更新时间:2023-10-29 05:37:43 24 4
gpt4 key购买 nike

我正在使用一个处理文件的程序,我可以做几件事,比如重命名它们、读取它们的内容等。

今天我按如下方式初始化它:

return new Promise((resolve, reject) => {
glob("path/for/files/**/*", {
nodir: true
}, (error, files) => {
files = files.map((file) => {
// properties like full name, basename, extension, etc.
});
resolve(files);
});
});

因此,我读取特定目录的内容,返回数组中的所有文件,然后使用 Array.map 遍历数组并更改具有属性的对象的路径。

有时我会处理 200.000 个文本文件,因此,这会成为一个问题,因为它消耗了过多的 RAM。

所以,我想用延迟加载的构造函数替换..但我以前从未这样做过...所以我正在寻找帮助。

这是我的代码:

class File {
constructor(path) {
this.path = path;
}

extension() {
return path.extname(this.path);
}
// etc
}

所以,我的主要问题是:我应该只退回对属性(property)的评估,还是应该更换它?像这样:

extension() {
this.extension = path.extname(this.path);
}

我知道这是一种权衡。我将通过 CPU 使用率来交换内存。

谢谢。

最佳答案

如果你想减少 RAM 使用,我建议你为每个路径存储一个额外的元数据文件,如下所示:

  1. 根据需要将路径或部分路径保存在内存中。

  2. 保存文件属性到硬盘

files.forEach( (file) => { 
// collect the properties you want for the file
// ...
var json = { path: file, extension: extension, .. }

// mark the metadata file so you can access it later, for example: put it in the same path with a suffix
var metaFile = path + '_meta.json';
fs.writeFile(metaFile, JSON.stringify(json), (err) => {
if (err) throw err;
});
});

现在所有元数据都在硬盘上。我相信,通过这种方式,您可以用内存换取磁盘空间和 CPU 调用。

  1. 如果您希望获取文件的属性,只需读取并JSON.parse 其对应的元数据文件即可。

关于javascript - 通过 CPU 交易 RAM(性能问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41425958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com