繁体   English   中英

没有足够的存储空间可用于在Visual Studio 2008中处理此命令

[英]Not enough storage is available to process this command in VisualStudio 2008

当我尝试在VS 2008中编译程序集时,(有时,通常在项目工作2-3小时后)出现以下错误

Metadata file '[name].dll' could not be opened -- 
       'Not enough storage is available to process this command.

通常要摆脱这种情况,我需要重新启动Visual Studio

我需要在项目中使用的程序集足够大(> 70 Mb),这可能是该bug的原因,在以前的项目中我从未见过类似的东西。 好的,如果这是我的问题的原因,那么为什么会发生这种情况以及我需要做些什么来阻止它。

我的驱动器和2Gb RAM上有足够的可用内存(发生异常时仅使用〜1.2 Gb)

我用谷歌搜索了这样的问题的答案。

建议通常与以下内容有关:

  1. WinXP中限制的用户处理程序的数量...
  2. 到每个进程可用的物理内存限制

我认为任何一个都无法解释我的情况

对于用户处理程序和其他GUI资源-我认为这可能不是问题。 70Mb的大型程序集实际上是一个无GUI代码,可与套接字一起运行并实现专有协议的解析器。 在我当前的项目中,我只有3个GUI表单,GUI控件总数小于100。

我想我的情况更接近于以下事实:在Windows XP中,进程地址空间受2 GB内存限制(并且考虑到内存分段,可能我没有足够大的可用段来分配内存) )。

但是,很难相信在Visual Studio中使用项目仅2-3小时后,细分可能会如此之大。 任务管理器显示VS消耗约400-500 Mb(OM + VM)。 在编译过程中,VS只需要加载元数据。

嗯,该库中有很多类和接口,但是我仍然希望1-2 Mb足以分配编译器用来查找所有公共类和接口的元数据 (尽管这只是我的建议) ,我不知道CLR在加载程序集元数据时到底发生了什么。

另外,我要说的是整个程序集之所以如此之大,仅是因为C++ CLI库具有将其他由um管理的库静态链接到一个DLL 我估计(使用Reflector).NET(托管)代码大约占该程序集的5-10%。

任何想法如何定义该错误的真正原因? .NET程序集大小是否有任何限制或建议? 是的,我知道值得考虑将一个大型程序集重构并拆分为几个较小的部分,但这是一个第三方组件,我无法对其进行重建

该错误具有误导性。 它确实应该说“找不到虚拟内存中足够大的连续空间来执行该操作”。 随着时间的流逝,虚拟内存空间的分配和释放会使其变得碎片化。 这可能导致以下情况:尽管有足够的总可用空间,但仍无法填充大量分配。

我认为这是您的“细分”所指的。 如果不知道需要加载的所有其他内容的所有详细信息以及占用2-3小时的其他活动,就很难说这是否真的是原因。 但是,我不会将其归类为“不可能”,实际上这是最可能的原因。

就我而言,以下修复程序有所帮​​助: http : //confluence.jetbrains.net/display/ReSharper/OutOfMemoryException+Fix

正如Anthony指出的那样,该错误消息有点令人误解。 问题不在于程序集的大小,而是与可用的连续内存有关。

该问题可能实际上并不是您的程序集的大小。 Visual Studio内部的某些情况很可能使内存碎片化,以至于构建无法完成。 这类问题的常见嫌疑人是

  1. 解决方案中的项目太多。
  2. 第三方加载项

如果您的解决方案中有10个以上的项目。 尝试分解解决方案,看看是否有帮助。

如果您有任何第三方插件,请尝试一次禁用它们,然后看问题是否消失。

我在一台机器上遇到此错误,令人惊讶的是,在其他开发机器上未发现此问题。 VS安装可能有问题。 但是我找到了一个更简单的解决方案。 如果删除解决方案的.suo文件,然后再次重新打开解决方案,它将开始正常运行。 希望这对遇险的人有用。

如果您只是想让它正常工作,请重新启动计算机,它会像魅力一样运转。 我在应用程序中遇到了同样的错误,然后在stackoverflow上阅读了所有答案之后,我决定先重启计算机,然后再进行其他修改。 这节省了我很多时间。

导致此问题的另一个原因可能是通过设计器使用了太多类型化的数据集。 或可以通过设计器实例化的其他类型,例如许多表单上的许多数据绑定控件。 我想像您是那种铁杆程序员,尽管他不会拖累DS! :D

关于您的问题,Bogdan,您是否尝试重现不包含c ++组件的问题? 如果不能,那么也许是这个。 您如何加载组件? 您是否尝试过其他技术,例如后期装订等? 有什么区别吗?

另外:是的,您是对的,其他罪魁祸首是表单上的许多控件。 我曾经见过同一个开发人员将同一个VB6应用程序导入到.net的问题。 他实际上有100多种表格。 几个小时后,他将定期崩溃IDE。 我很确定这是线程耗尽。 可能需要设置一个没有加载插件的香草盒子,只是为了排除插件,但我的猜测是,就VS和您的盒子规格而言,您只是碰壁。 尝试运行Windows Vista 64位并安装一些额外的RAM模块。

如果内存使用量和VM大小较小,则无法使用。 明确杀死devenv.exe运行的“所有”实例。

我运行了3个devenv.exe,因为在前面打开了两个Visual Studion实例。

就我而言,这就是解决方案。

我知道自从对此进行评论以来已经有很长时间了,但是今天我在VS2010中使用telerik dll遇到了这个确切的问题。 直到今天我在IE中进行一些设置更改之前,我从未见过此问题。

在“文件和文件夹”部分的“工具/文件夹选项/视图”中有一个名为“在单独的过程中启动文件夹窗口”的设置。

我不确定使用此设置时每个窗口使用的内存量,但是直到今天我还没有检查过。 由于多种原因检查了此选项后,我开始获取“没有足够的存储空间来处理此命令”。 telerik dll是一个18mb的dll,我们在库文件夹中使用它作为项目参考。

取消选中此按钮即可解决问题。

只是作为另一个可能的解决方案

我也面临同样的问题。 确保Windows操作系统使用64位。 我从Windows 32位切换到Windows 64位。 我的问题解决了。

我遇到了同样的问题,在我的情况下,异常名称非常容易引起误解。 实际的问题是由于无效路径,根本无法加载DLL。 我说的例外是“

我在C#,ASP.NET应用程序中使用DllImport属性,其声明如下所示,这导致了异常:

   [DllImport(@"Calculation/lib/supplier/SupplierModule.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, EntryPoint = "FunctionName")]

以下是工作代码段:

[DllImport(@"Calculation\lib\supplier\SupplierModule.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, EntryPoint = "FunctionName")]

实际的问题是在路径中使用正斜杠,而不是反斜杠。 这让我花了太多时间去弄清楚,希望这对其他人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM