首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node JS块文件作为一个文件无中断读取?

Node JS块文件作为一个文件无中断读取?
EN

Stack Overflow用户
提问于 2017-01-09 05:18:28
回答 1查看 906关注 0票数 0

我成功地读取了m3u8和解压ts文件,读取了m3u8并检查是否向其中写入了新的索引(ts文件),然后使用

代码语言:javascript
复制
res.write(chunk);

我得到流没有interrupting..it是读取文件的顺序,这是定义在m3u8文件和所有都是工作的flawlessly...but我有一个巨大的problem...using res.write我得到我的块ts文件是从硬盘读取到内存和内存使用率增加每秒1MB,所以在大约一个小时内,我将进入出memory...so的问题是,我怎样才能擦除以前从内存读取ts文件,使内存使用率将一直保持不变?

我看到res.write正在向内存写入数据,但是没有从memory..and中删除旧数据,这种方式是不实际的,而且会从内存中取出我使用的errors.Can缓冲区大小,所以当缓冲区大小已满时,会自动从内存中擦除,并将下一个区块数据读取到res.write吗?

代码如下:

代码语言:javascript
复制
fs.readFile('/tmp/files/'+ts[ts.length-2], function (err, data ) {
    res.write(data);
    /* HERE I NEED TO CLEAR DATA BUFFER CHUNK FROM MEMORY */
});

所以我在循环中读取1000个文件(小块),并将其写入响应client...this工程,没有interrupting...but内存使用率是文件大小在硬盘上读取,所以内存使用率是growing...how我可以从内存中删除数据后,他们被发送到客户端?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-10 21:39:56

我终于找到解决方案了..当我在节点上运行test.js时,我只需要添加:

代码语言:javascript
复制
node --expose-gc test.js

在从硬盘上的文件中读取流之前,我补充道:

代码语言:javascript
复制
global.gc();

这样,当run释放从函数fs.filereadsync...so读取的所有内存时,我的代码如下所示:

代码语言:javascript
复制
global.gc();
fs.readFile('/tmp/files/'+ts[ts.length-2], function (err, data ) {
   res.write(data);

});

当启动节点js时,这个way...RAM的使用是相同的,所有的time...it都不依赖于文件块的大小,当再次调用这个函数时,large...it将大文件读到memory..and,它会释放内存进入启动状态,并读取内存中的另一个块文件,依此类推...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41538005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档