有这样的事吗?
在Stack Overflow上的一个问题的答案(见下文)给了我一个很棒的小软件的想法,这对任何地方的编码人员都是非常宝贵的。
我想象的是内存驱动器软件,但有一个关键的区别 - 它会镜像在我的硬盘上的真实文件夹。 更具体地说 - 包含我目前正在处理的项目的文件夹。 这样,任何构建都将几乎是瞬间的(或者至少快几个数量级)。 RAM驱动器只使用空闲资源将其内容与后台硬盘驱动器同步。
Google的一个快速搜索没有透露任何信息,但也许我只是不知道如何去Google。 也许有人知道这样的软件? 最好免费但合理的费用也可以。
补充:一些解决方案已经提出,我在开始时就放弃了。 他们会(没有特定的顺序):
新增2:提出了一个想法 - 使用普通的RAM驱动器加上背景文件夹同步器(但我的意思是背景)。 有没有这样的事情?
新增3:有趣。 我在工作中尝试了一个简单的RAM驱动器。 重建时间从〜14秒降到〜7秒(不错),但增量版本仍然在〜5秒 - 就像在硬盘上一样。 任何想法为什么? 它使用aspnet_compiler
和aspnet_merge
。 也许他们在其他地方使用其他临时文件?
补充4:哦,很好的新答案! :)好的,我为你们所有的反对者提供了更多信息。 :)
这个想法的主要原因之一不是上述软件(14秒的编译时间),而是另一个我当时没有访问的软件。 这个其他应用程序具有100 MB的代码库,其完整构建大约需要5分钟。 是的,它在Delphi 5中,所以编译器不是太高级。 :)将源放在RAM驱动器上会导致很大的差异。 我想,我在一分钟之内就明白了。 我没有测量过。 所以对于所有那些说操作系统可以更好地缓存东西的人来说 - 我会乞求不同的。
相关问题:
RAM磁盘以加速IDE
第一个链接的注意事项:它所链接的问题已被删除,因为它是重复的。 它问道:
你的代码在编译时做什么?
我连接的Dmitri Nesteruk的答案是:
我几乎立即编译。 部分原因是我的项目很小,部分原因是由于使用了RAM磁盘。
在Linux中(你从来没有提到你在使用哪个操作系统,所以这可能是相关的),你可以从RAM创建块设备,并像其他块设备(即HDD)一样安装它们。
然后,您可以创建脚本,以便在启动/关闭时以及定期复制和从该驱动器复制。
例如,你可以设置它,所以你有~/code
和~/code-real
。 你的RAM块在启动时被加载到~/code
中,然后所有从~/code-real
(在你的标准硬盘上)的内容都被复制过来。 在关闭时,所有内容都将被复制(rsync'd会更快),从~/code
返回~/code-real
。 您也可能希望该脚本定期运行,所以在发生电源故障等情况下不会失去太多工作。
我不再这样做了(我在9.5版测试版中使用它的时候很慢,不再需要)。
这里是如何在Linux中创建一个RAM磁盘。
我很惊讶有多少人认为操作系统在确定缓存需求方面可以做得比在这种特殊情况下做得更好。 虽然我没有这样做编译,但我确实是为了类似的过程而做的,而且我最终使用了一个带有自动同步脚本的RAM磁盘。
在这种情况下,我想我会选择一个现代化的源代码控制系统。 在每次编译时,它都会自动检查源代码(如果需要,可以沿着实验分支),以便每次编译都会导致数据被保存。
要开始开发,请启动RAM磁盘并拉出当前基线。 进行编辑,编译,编辑,编译等 - 所有这些修改都是为您保存的。
在开心的时候进行最后的检查,而且你甚至不必涉及普通的硬盘驱动器。
但是有后台同步器会自动执行 - 问题在于它们不会针对编程进行优化,并且可能需要偶尔执行完整的目录和文件扫描以捕获更改。 源代码控制系统正是为此目的而设计的,因此即使它存在于您的构建设置中,它的开销也可能较低。
请记住,在发生停电的情况下,后台同步任务未定义。 如果事情出错了,你最终不得不弄清楚保存的内容和保存的内容。 有了一个确定的保存点(在每次编译时,或者手工强制),你都会有一个很好的想法,即它至少处于你认为可以编译它的状态。 使用VCS,您可以轻松将其与以前的代码进行比较,并查看您已经应用了哪些更改。
请参阅加速使用tmpfs(Gentoo Linux wiki)。
在Gentoo下使用RAM驱动器加速编译是很多年前编写的方法的主题。 它提供了已经完成的具体事例。 要点是所有源代码和构建中间文件都被重定向到一个RAM磁盘进行编译,而最终的二进制文件则指向硬盘驱动器进行安装。
另外,我建议探索在硬盘上保留源代码,但git push
最新的源更改git push
送到驻留在RAM磁盘上的克隆存储库。 编译克隆。 使用您最喜欢的脚本来复制创建的二进制文件。
我希望有所帮助。
链接地址: http://www.djcxy.com/p/85411.html下一篇: How do YOU reduce compile time, and linking time for Visual C++ projects (native C++)?