C# の OutOfMemoryException は、プログラムの実行を継続するのに十分なメモリがない場合に、.NET Framework 実行エンジンによってスローされる例外です。その名前が示すように、この例外は、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 が発生します。この例外が発生する理由は数多く考えられます。この例外は、全体としてプログラムを実行するのに十分な領域があるにもかかわらず、この領域がプログラムで必要な割り当てに連続していない場合にも発生します。この例外の主な理由は次の 2 つです:
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# のメモリ不足例外の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。