引发了“System.OutOfMemoryException”类型的异常。 C# 使用内存流时

Posted

技术标签:

【中文标题】引发了“System.OutOfMemoryException”类型的异常。 C# 使用内存流时【英文标题】:Exception of type 'System.OutOfMemoryException' was thrown. C# when using Memory stream 【发布时间】:2013-08-09 16:31:37 【问题描述】:

我正在使用 wpf 应用程序和内存流写入方法用于写入 dicom 数据字节。当尝试写入大小超过 70 mb 的大 dicom 数据时,它显示类型为 System.OutOfMemoryException 的异常。您能否提出解决此问题的任何解决方案。

这段代码是这样的

try
            
                using ( MemoryStream imagememoryStream = new MemoryStream())
                
                    while (true)
                    
                        // Retrieve the DICOMData.
                        // data comes as chunks; if file size is larger, multiple RetrieveDICOMData() calls
                        // has to be raised. the return value specifies whether the chunk is last one or not.                  
                        dicomData = dicomService.RetrieveDICOMData( hierarchyInfo );
                        imagememoryStream.Write( dicomData.DataBytes, 0, dicomData.DataBytes.Length );
                        if (dicomData.IsLastChunk)
                        
                            // data is smaller; completed reading so, end
                            break;
                        
                    
                    imageData=imagememoryStream.ToArray();
                
                return imageData;
            
            catch( Exception exception )
            
                throw new DataException( exception.StackTrace );
            

【问题讨论】:

不能把这些数据分块写入吗?为什么一定要这么大? 你能发布你的代码吗? 我说先生,您的进程似乎是……内存不足。确实很奇怪! 从来没有程序员知道 32 位进程可以访问多少地址空间。 尝试调用 GC.Collect();在循环内。 我在循环中使用了 GC.Collect() ,但同样的问题发生了......任何替代品?? 【参考方案1】:

由于缺少可用的连续(非全部)内存,MemoryStream 抛出 OutOfMemoryExceptions 是很常见的。有许多替代实现可以减轻这个问题。以MemoryTributary 为例。

或者,根据您的需要,您可以尝试直接写入存储而不是内存。

【讨论】:

谢谢,我会试试,很快就会回来 一切正常。非常感谢您的宝贵建议。但是我在托管 cpp 中有一个依赖项目,它显示“没有足够的存储空间来处理这个命令”异常。您能提出任何解决方案吗?

以上是关于引发了“System.OutOfMemoryException”类型的异常。 C# 使用内存流时的主要内容,如果未能解决你的问题,请参考以下文章

我怎么知道是啥引发了异常?

类型初始值设定项引发异常

COM 互操作对象在一个项目中引发 InvalidCastException,但在其他项目中不引发

WinUI3 应用程序引发异常 - 我错过了啥?

如何正确断言在 pytest 中引发了异常?

执行 Task.Cancel 方法时引发异常。我错过了啥吗? [复制]