环境:
我们有一个播放视频的桌面应用程序。该视频是项目的一部分,项目将打包到安装程序中。每隔一段时间构建一个安装程序项目就会显示以下错误消息:
没有足够的存储空间来完成此操作
如果我重新启动Visual Studio,它就可以工作。
有没有办法避免这种情况?有没有更好的方法在安装程序中打包视频?
答案 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 operation“ScottBurton42”的答案。它建议将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 GBWindows Server 2003,Windows XP和Windows 2000支持
/3GB
参数。在Windows Vista和更高版本的Windows上,使用IncreaseUserVA
中的BCDEdit
元素。
重新启动机器将使设置生效。
解决方案2:让devenv.exe
感知大地址:
打开Visual Studio命令提示符(或开发人员命令提示符,具体取决于Visual Studio的版本)
输入并执行以下命令行:
editbin /LARGEADDRESSAWARE {path}\devenv.exe`
其中{path}
是devenv.exe
的路径(您可以通过转到Visual Studio快捷方式的属性来找到它。)
这将允许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,您可以尝试执行以下操作:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE
。editbin /LARGEADDRESSAWARE devenv.exe
。希望这会有所帮助)