C#中的OutOfMemoryException是.NET框架执行引擎在程序没有足够内存继续执行时抛出的异常。顾名思义,当 CLR(即公共语言运行时)无法分配执行程序的某些操作所需的足够内存时,我们的程序中就会出现此异常。
此异常并不总是意味着我们没有足够的可用内存空间,但有时这意味着我们没有足够的程序分配所需的连续内存。
语法
C# 中捕获 OutOfMemoryException 的语法如下:
try { //user code which can throw OutOfMemoryException } catch(OutOfMemoryException <em>exception</em>) { //statements to handle the exception }
C# 中抛出 OutOfMemoryException 的语法如下:
throw new OutOfMemoryException();
上面的语句中,'throw'是C#中用于抛出异常的关键字。
在 C# 中,当我们的程序没有足够的空间来继续执行时,我们会得到 OutOfMemoryException。出现此异常的原因可能有很多。当我们总共有足够的空间供程序执行,但该空间对于程序所需完成的分配来说并不连续时,我们也会遇到此异常。造成此异常的两个主要原因如下:
尝试将 StringBuilder 对象的长度增加到超出 StringBuilder 的 MaxCapacity 属性指定的长度。
我们会收到异常“内存不足,无法继续执行程序。”
可能导致此异常的其他原因包括:
以下是下面提到的示例
显示当我们尝试将 StringBuilder 对象扩展到超出其最大容量时程序抛出 OutOfMemoryException 的示例。
代码:
using System; using System.Text; public class Program { public static void Main() { StringBuilder stringBuilder = new StringBuilder(17, 17); stringBuilder.Append("Welcome to the "); try { stringBuilder.Insert(0, "world of C# programming", 1); Console.WriteLine(stringBuilder.ToString()); Console.ReadLine(); } catch (OutOfMemoryException exception) { Console.WriteLine(exception.Message); Console.ReadLine(); } } }
输出:
示例显示程序在尝试向列表中添加元素时遇到 OutOfMemoryException,其中要添加的元素数量超过了列表的容量。
代码:
using System; using System.Text; using System.Collections.Generic; namespace ConsoleApp4 { public class Program { public static void Main() { try { string[] strArray = GetArray(); Console.WriteLine(strArray); Console.ReadLine(); } catch (OutOfMemoryException exception) { Console.WriteLine(exception); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.ReadLine(); } } public static string[] GetArray() { List<string> strList = new List<string>(); for (int i = 0; i <= int.MaxValue; i++) { strList.Add("Hello"); } return strList.ToArray(); } } }
输出:
我们可以通过记住以下几点来避免 C# 中的 OutOfMemoryException:
如果列表中没有 64 位平台,则:
OutOfMemoryException 是一个运行时异常,它告诉程序员没有足够的内存或缺少连续内存来分配 C# 程序所需的内存。
为了避免此异常,用户应始终采取必要的预防措施并处理此异常。
以上是C# OutOfMemoryException的详细内容。更多信息请关注PHP中文网其他相关文章!