环境:
- Visual Studio Ultimate 2010
- Windows XP
- 使用.NET 4.0的WPF桌面应用程序/li>
我们有一个播放视频的桌面应用程序。该视频是项目的一部分,并打包到安装程序中。但有时构建安装程序会显示以下错误消息:
没有足够的存储空间完成此操作
如果我重新启动Visual Studio,它就可以正常工作。
有没有办法避免这种情况?有没有更好的方法来在安装程序中打包视频?
环境:
我们有一个播放视频的桌面应用程序。该视频是项目的一部分,并打包到安装程序中。但有时构建安装程序会显示以下错误消息:
没有足够的存储空间完成此操作
如果我重新启动Visual Studio,它就可以正常工作。
有没有办法避免这种情况?有没有更好的方法来在安装程序中打包视频?
通常在构建过程中需要大量的RAM内存而无法获得时,会出现这种情况。由于重新启动Visual Studio可以解决问题,很可能也适用于你的情况。
尝试关闭一些正在运行的应用程序。您还可以尝试增加计算机的RAM或增加页面文件大小。
没有足够的存储空间来完成此操作
在我的构建输出中报错。
这个问题的任何答案都没有帮助,但我在 social.msdn.microsoft.com 上找到了一个关于 "Not enough storage is available to complete this operation" 的答案,作者是 ScottBurton42。它建议将 3GB
开关添加到 Boot.ini
文件中,并使 devenv.exe
具有大地址空间。对我的解决方案是在我的 Boot.ini
文件中添加 3GB
开关(我认为 Visual Studio 2010 及以上版本的 devenv.exe
已经具有大地址空间)。
我的答案基于那个答案。
解决方案1:设置/3GB
Boot.ini
开关
MSDN上的内存支持和Windows操作系统页面说:
在 Windows XP 中,可以通过以下步骤修改The virtual address space of processes and applications is still limited to 2 GB unless the
/3GB
switch is used in theBoot.ini
file.The
/3GB
switch allocates 3 GB of virtual address space to an application that usesIMAGE_FILE_LARGE_ADDRESS_AWARE
in the process header. This switch allows applications to address 1 GB of additional virtual address space above 2 GB.The virtual address space of processes and applications is still limited to 2 GB, unless the
/3GB
switch is used in theBoot.ini file
. The following example shows how to add the /3GB parameter in theBoot.ini
file to enable application memory tuning:
[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
Note "
????
" in the previous example is be the programmatic name of the operating system.
Boot.ini
文件:/3GB
开关的页面如下:/3GB
参数启用 4 GT RAM 调整功能,该功能将用户模式虚拟地址空间扩大到 3 GB,并将内核模式组件限制为剩余的 1 GB。
/3GB
参数支持 Windows Server 2003、Windows XP 和 Windows 2000。在 Windows Vista 和后续版本中,请使用 BCDEdit
中的 IncreaseUserVA
元素。devenv.exe
支持大地址(large address aware)。
Open up a Visual Studio Command Prompt (or a Developer Command Prompt, depending on the version of Visual Studio)
Type and execute the following command line:
editbin /LARGEADDRESSAWARE {path}\devenv.exe`
where {path}
is the path to devenv.exe
(you can find this by going to the properties of the Visual Studio shortcut).
devenv.exe
访问3GB内存,而不是2GB。devenv.exe
适用于VS 2010+已经是大地址感知的”语句可能是错误的)。谢谢! - Sen Jacob问题
在我的案例中,问题出在一个测试项目里,它包含了一个非常大的(1.5GB)测试文件作为嵌入资源。此时我的机器上有16GB RAM,其中8GB是空闲的,所以RAM不是问题。
可能我们遇到了CLR对任何单个对象的2GB限制。不深入研究MSBuild正在进行的操作,我只能推测在编译时,嵌入资源被加载到一个对象图中,达到了这个限制。
错误信息非常无用。我看到它时,首先想到的是,“难道我的磁盘空间已经用完了吗?”
解决方案
这是一个文件验证测试项目。其中一个要求是能够处理这样大小的文件,因此,初步看来,我的团队认为将其嵌入以供测试是合理的。
我们通过将文件移到网络上(以与生产环境中的验证器访问方式相同),并将测试标记为集成测试而不是单元测试来修复错误。毕竟,单元测试应该是快速运行的,不是吗?
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE
。editbin /LARGEADDRESSAWARE devenv.exe
。在我的情况下,C盘的可用内存非常少。我从C盘中清除了一些项目并重新尝试了一次。这次成功了。
虽然我回答晚了,但是以后参考的话,你可能需要检查一下Windows转储文件设置(并且可能将其设置为“无”)。
new ParallelOptions { MaxDegreeOfParallelism = Math.Max(1, Environment.ProcessorCount / 2) }
引入一个变量并将使用的核心锁定为1(导致代码类似于以下代码),这对我解决了这个问题。
new ParallelOptions { MaxDegreeOfParallelism = 1 }
我通过删除或禁用(排除)大尺寸的*.rpt文件来解决这个问题;并且我已经优化了我的报告!