【问题标题】:Do compilation files have to hit disk?编译文件必须打到磁盘吗?
【发布时间】:2016-03-07 22:03:06
【问题描述】:

我读过这个关于what the obj and bin folders are 的问题。

我的 APP/obj/CONFIGURATION 文件夹包含数百个文件。这包括每个表单(作为 .resources 文件)、图标、图像(.bmp、.jpg 等)、多语言翻译文件等的副本。构建最多需要三(痛苦!)分钟才能完成。

  • 这些中间文件必须以这种方式访问​​磁盘吗?
  • 能否将 Visual Studio 配置为不使用所有这些副本访问磁盘,而是链接内存中的所有内容?

这是一个 C#.NET 应用程序,如果相关的话。

【问题讨论】:

  • 获取 SSD。这将产生巨大的影响。
  • @MatthewWatson:好主意,但不是立即实用! :o)
  • 很遗憾,您无法将 VS 配置为在内存中进行构建。
  • 我为此做了一些小研究,然后转而将项目构建到 ramdisk 并将所有项目的输出放到 1 个文件夹中,在我的情况下,我会说它工作得很好。您还可以尝试使用 MKLINK 和“如果较新则复制”选项为您的项目链接输出文件夹中的文件,但这可能是一个真正的痛苦
  • 如果没有 SSD,RAM 磁盘是否可以成为您的另一种选择?

标签: c# visual-studio


【解决方案1】:

在我的例子中,我使用ImDisk 创建一个 RAM 磁盘,然后我指示 Visual Studio 使用一个简单的方法将一些临时文件存储在整个 RAM 磁盘中(M: 是 RAM 磁盘的驱动器号) BAT/CMD 文件:

set TEMP=M:\vstemp
set TMP=M:\vstemp
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"

另一方面,我已自定义构建以将 $(OutputPath) 指向 RAM 磁盘中的目录。

另外,我发现了另一个问答,其中包含更改 obj 目录的信息:VisualStudio: How to save the obj folder somewhere else

无论如何,固态磁盘可以提高 Visual Studio 的整体性能,同时使用 SSD+RAMDisk 方法将避免对 SSD 进行大量写入操作,从而延长其使用寿命。

【讨论】:

  • 感谢有关 ImDisk 的提示。该工具看起来很棒,现在正忙着尝试一下。由于无法要求 Visual Studio 不输出临时链接器文件,因此 RAM 磁盘似乎是可行的方法。
  • @AlainD 好吧,不要梦想您可以将所有内容移至 RAMDisk。 MSBuild 仍然会打到 HDD/SSD,顺便说一句,如果你足够自定义你的构建,你将能够超过 50% 的创建文件到 RAM 磁盘
  • 请注意,这将导致所有程序生成的临时文件都写入 RAM 磁盘。除非某些应用程序尝试写入比您的 RAM 磁盘更大的文件,否则这可能会很好,此时您将收到“磁盘空间不足”错误。
  • @MatthewWatson AFAIK 这不是真的,您正在为设置它们的进程设置这些环境变量。它不会影响其他应用程序。
  • @MatthewWatson 自己试试吧。 SET TEMP 在 CMD 中打开另一个,然后尝试 ECHO %TEMP%
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多