没有足够的存储空间来完成此操作

Ran*_*esh 21 windows-installer visual-studio-2010

环境:

  • Visual Studio Ultimate 2010
  • Windows XP
  • 使用.NET 4.0的WPF桌面应用程序

我们有一个播放视频的桌面应用程序.该视频是项目的一部分,项目将打包到安装程序中.每隔一段时间构建安装程序项目就会显示以下错误消息:

没有足够的存储空间来完成此操作

如果我重新启动Visual Studio它的工作原理.

有办法避免这种情况吗?有没有更好的方法在安装程序中打包视频?

Cos*_*rvu 13

当构建过程需要大量RAM内存而无法获取时,通常会发生这种情况.由于重新启动Visual Studio可以解决问题,因此很可能也是如此.

尝试关闭一些正在运行的应用程序.您还可以尝试向计算机添加更多RAM或增加页面文件.

  • 根据我的经验不正确:我的RAM利用率为1/4,在构建过程中没有明显的峰值.我已经看到了Cosmin在其他地方给出的这个股票答案,如果可以,我会投票. (6认同)

Dan*_*son 7

问题

就我而言,问题在于测试项目包含一个非常大(1.5GB)的测试文件作为嵌入式资源.我的机器里有16GB内存,当发生这种情况时可以免费使用8GB内存,因此RAM不是问题所在.

我们可能会达到CLR对任何单个对象2 GB限制.在没有深入研究MSBuild在幕后做什么的情况下,我只能推测在编译期间,嵌入式资源被加载到达到此限制的对象图中.

错误消息非常无用.当我看到它时,我的第一个想法是,"我的磁盘空间是否耗尽?"

它是一个文件验证测试项目.其中一个要求是能够处理这种大小的文件,所以从表面上看,我的团队认为将其嵌入测试用例是合理的.

我们通过将文件移动到网络上来修复错误(与生产中验证器访问的方式相同)并将测试标记为集成测试而不是单元测试.总而言之,是不是应该快速运行的单元测试?


Wai*_*Lee 7

在尝试在Windows XP中的Visual Studio 2010中编译我的C#解决方案时,我遇到了这个问题.一个项目有相当数量的嵌入式资源(最终组件的大小约为140MiB)我无法编译解决方案因为我得到了

没有足够的存储空间来完成此操作

我的构建输出中的错误.

这个问题的答案都没有帮助,但我确实找到了ScottBurton42在social.msdn.microsoft.com上找到的" 没有足够的存储空间来完成此操作 "的答案.它建议将开关添加到文件中,并使大地址识别.将开关添加到我的文件对我有用(我认为Visual Studio 2010及更高版本已经具有大地址识别功能).3GBBoot.inidevenv.exe3GBBoot.inidevenv.exe

我的答案是基于这个答案.


解决方案1:设置/3GB Boot.ini开关

MSDN 上的内存支持和Windows操作系统页面说:

除非/3GBBoot.ini文件中使用交换机,否则进程和应用程序的虚拟地址空间仍限制为2 GB .

所述/3GB开关分配3 GB的虚拟地址空间到使用的应用程序IMAGE_FILE_LARGE_ADDRESS_AWARE的过程中头.此开关允许应用程序处理1 GB以上2 GB以上的额外虚拟地址空间.

除非在/3GB交换机中使用交换机,否则进程和应用程序的虚拟地址空间仍限制为2 GB Boot.ini file.以下示例显示如何在Boot.ini文件中添加/ 3GB参数以启用应用程序内存调整:

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINNT

[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="????" /3GB
Run Code Online (Sandbox Code Playgroud)

注意????前面示例中的" "是操作系统的编程名称.

在Windows XP中,Boot.ini可以通过转到来修改该文件

  • 系统属性→高级→启动和恢复→设置→系统启动→编辑

/3GBMSDN 上的交换机页面上显示:

在32位版本的Windows上,该/3GB参数启用4 GT RAM调整,该功能可将用户模式虚拟地址空间扩大到3 GB,并将内核模式组件限制为剩余的1 GB.

/3GBWindows Server 2003,Windows XP和Windows 2000上支持该参数.在Windows Vista和更高版本的Windows上,使用IncreaseUserVA元素in BCDEdit.

重新启动机器将使设置生效.


解决方案2:使devenv.exe大地址识别:

  1. 打开Visual Studio命令提示符(或开发人员命令提示符,具体取决于Visual Studio的版本)

  2. 输入并执行以下命令行:

    editbin /LARGEADDRESSAWARE {path}\devenv.exe`
    
    Run Code Online (Sandbox Code Playgroud)

    这里{path}是路径devenv.exe(你可以去到Visual Studio快捷方式的属性中找到此).

这将允许devenv.exe访问3GB内存而不是2GB.