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中文網其他相關文章!