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

时间:2011-07-08 14:38:04

标签: visual-studio-2010 windows-installer

环境:

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

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

  

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

如果我重新启动Visual Studio,它就可以工作。

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

10 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:7)

<强>问题

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

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

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

<强>解决方案

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

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

答案 2 :(得分:5)

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

  

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

我的构建输出错误。

这个问题的答案都没有帮助,但我确实在social.msdn.microsoft.com上找到了Not enough storage is available to complete this operationScottBurton42”的答案。它建议将3GB开关添加到Boot.ini文件,并使devenv.exe知道大地址。将3GB开关添加到我的Boot.ini文件对我有用(我认为devenv.exe对于Visual Studio 2010及更高版本已经大地址识别)。

我的回答是基于这个答案。

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

MSDN上的Memory Support and Windows Operating Systems页说:

  

除非在/3GB文件中使用Boot.ini开关,否则进程和应用程序的虚拟地址空间仍限制为2 GB。

     

/3GB开关为进程标头中使用IMAGE_FILE_LARGE_ADDRESS_AWARE的应用程序分配3 GB的虚拟地址空间。此开关允许应用程序处理2 GB以上1 GB的额外虚拟地址空间。

     

除非在/3GB中使用Boot.ini file开关,否则进程和应用程序的虚拟地址空间仍限制为2 GB。以下示例显示如何在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
     

注意前一个示例中的“????”是操作系统的编程名称。

在Windows XP中,可以通过转到

来修改Boot.ini文件
  • 系统属性→高级→启动和恢复→设置→系统启动→编辑

MSDN上/3GB开关上的页面显示:

  

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

     

Windows Server 2003,Windows XP和Windows 2000支持/3GB参数。在Windows Vista和更高版本的Windows上,使用IncreaseUserVA中的BCDEdit元素。

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

解决方案2:让devenv.exe感知大地址:

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

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

    editbin /LARGEADDRESSAWARE {path}\devenv.exe`
    

    其中{path}devenv.exe的路径(您可以通过转到Visual Studio快捷方式的属性来找到它。)

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

答案 3 :(得分:1)

在我的情况下,我在C盘中剩下的内存非常少。我从C盘中清除了一些物品并再次尝试。它奏效了。

答案 4 :(得分:1)

我可能迟到了,但为了将来参考,您可能需要检查Windows转储文件设置(并可能将其设置为无)。

答案 5 :(得分:1)

在我的情况下,我执行代码的服务器无法处理我的并行化代码。

通常我正在运行如下设置

new ParallelOptions { MaxDegreeOfParallelism = Math.Max(1, Environment.ProcessorCount / 2) }

引入变量并允许锁定用于1的核心(导致代码如下),为我解决了这个问题。

new ParallelOptions { MaxDegreeOfParallelism = 1 }

答案 6 :(得分:0)

对我来说关键: 我们在应用程序中嵌入了一个巨大的数据库模板(测试已经填充了大量数据)。我没有看到这个问题出现,因为正确删除嵌入式资源沸腾并将数据库移动到追索文件夹。

答案 7 :(得分:0)

我通过删除或禁用(排除)大尺寸的* .rpt文件解决了这个问题;并且我已经优化了我的报告!

答案 8 :(得分:0)

我迟到了,但可能对其他人有用 在我的情况下,只需重新启动Visual Studio即可解决问题

答案 9 :(得分:0)

对于Visual Studio,您可以尝试执行以下操作:

  1. 关闭所有Visual Studio实例。
  2. 管理员模式打开Visual Studio Developer工具。
  3. 导航至:
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE
  4. 输入以下内容:
    editbin /LARGEADDRESSAWARE devenv.exe
  5. 重启PC也很值得。

希望这会有所帮助)