在 Windows 7 中打开太多文件(EMFILE 错误)

Open Too Many Files (EMFILE Error) in Windows 7

我正在使用 Node.js (0.10.31) 和 Gulp (3.8.8) 来自动执行 Windows 7 中的一些任务,但我遇到了以下错误:

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: EMFILE, open 'c:\myproject\package.json'

我已将项目移至 Ubuntu 并使用 ulimit -n 命令修复该问题,但仍然想知道如何在 Windows.

中解决该问题

现在,首先我想知道在Windows 7 中是否存在阻止打开更多files/sockets 导致EMFILE error 的限制?

其次,如果是,我该如何更改该限制?

VSC++ 运行时内部存在限制。应用程序在运行时只能打开 512 个文件描述符,但如果应用程序调用 _setmaxstdio(我认为节点不会),该值可以增加到 2048。 (这是一个稍微简化的解释,有关更多详细信息,请参阅 here。)您不能直接更改此限制(如果您想让节点以某种方式为您调用此函数,则只能将 512 提高到 2048)。

无论您怎么写,您使用的节点 v0.10.31 已经很旧了。据我所知(尽管我不是 100% 确定这一点),节点同时从使用文件 I/O 的 VSC++ 运行时切换到没有此限制的本机 WinAPI 调用,因此您可以如果这是您的选择,请尝试最新的节点版本。