Node.js 节点多内存存储:如何释放内存

Node.js 节点多内存存储:如何释放内存,node.js,multer,Node.js,Multer,好的,multer支持内存存储,这很好 但是上传文件后如何释放内存 存储=multer.memoryStorage() upload=multer({storage:storage}).single('image') 对于磁盘存储,我可以删除dest文件夹中的文件 另外,如果两个用户上载具有相同文件名的文件会发生什么情况,内存存储会发生什么情况 谢谢 但是上传文件后如何释放内存呢 一旦完成请求,内存将被释放 (当垃圾收集器(GC)清理时,通常几乎是直接清理) 如果2个用户上传具有相同文件名的文件

好的,multer支持内存存储,这很好

  • 但是上传文件后如何释放内存

    存储=multer.memoryStorage()

    upload=multer({storage:storage}).single('image')

  • 对于磁盘存储,我可以删除dest文件夹中的文件

  • 另外,如果两个用户上载具有相同文件名的文件会发生什么情况,内存存储会发生什么情况
  • 谢谢

  • 但是上传文件后如何释放内存呢
  • 一旦完成请求,内存将被释放

    (当垃圾收集器(GC)清理时,通常几乎是直接清理)

  • 如果2个用户上传具有相同文件名的文件, 内存存储会发生什么变化
  • 您不必担心,因为每个文件都在它自己的作用域内处理,这意味着,正如我上面提到的,每个请求都会被处理,然后,一旦处理完成,请求就会被清除(以及memoryStorage中存储的request.file)

    我建议您检查multer如何处理内存存储

    正如您所看到的,文件只是流式传输到回调(cb),因此没有全局引用会阻止它在内存中生存(没有对它的引用=不再需要=垃圾=GC)


    memoryStorage主要用于临时处理文件缓冲区

    示例:您希望接收小文件并将其中继到另一台存储介质的服务器。 (multer接收存储在内存中的临时数据,一旦不再引用内存,它将自行中继并释放内存)

    MemoryStorage.prototype._handleFile = function _handleFile (req, file, cb) {
      file.stream.pipe(concat(function (data) {
        cb(null, {
          buffer: data,
          size: data.length
        })
      }))
    }