C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でOutOfMemoryException(メモリ不足の例外)を捕捉・処理する方法を解説

System.OutOfMemoryExceptionは、CLR(共通言語ランタイム)が必要なメモリの確保に失敗したときに発生する例外です。この例外はSystem.SystemExceptionクラスを継承しており、プログラムが利用可能なメモリ容量を超えてリソースを要求した場合などにスローされます。

OutOfMemoryExceptionが発生する仕組み

ここでは、StringBuilderの容量制限によって意図的にこの例外を発生させる例を見てみましょう。

まず、文字列を用意します。

string StudentName = "Tom";
string StudentSubject = "Maths";

次に、初期値の長さと同じ容量を持つStringBuilderを初期化します。

StringBuilder sBuilder = new StringBuilder(StudentName.Length, StudentName.Length);

この状態で、すでに設定された容量を超える追加の値を挿入しようとすると、例外が発生します。

sBuilder.Insert(value: StudentSubject, index: StudentName.Length - 1, count: 1);

その結果、以下のような例外がスローされます。

System.OutOfMemoryException: Out of memory

try-catchを使った例外の捕捉方法

このエラーを捕捉して適切に処理するには、try-catchブロックを使用します。以下のコード例をご覧ください。

コード例

using System;
using System.Text;

namespace Demo {
    class Program {
        static void Main(string[] args) {
            try {
                string StudentName = "Tom";
                string StudentSubject = "Maths";
                StringBuilder sBuilder = new StringBuilder(StudentName.Length, StudentName.Length);
                // 初期値を追加
                sBuilder.Append(StudentName);
                // 容量を超える挿入により例外が発生
                sBuilder.Insert(value: StudentSubject, index: StudentName.Length - 1, count: 1);
            } catch (System.OutOfMemoryException e) {
                Console.WriteLine("Error:");
                Console.WriteLine(e);
            }
        }
    }
}

上記のコードでは、catch句でSystem.OutOfMemoryExceptionを受け取り、例外の詳細をコンソールに出力しています。これにより、アプリケーションが予期せずクラッシュすることを防げます。

実行結果

Error:
System.OutOfMemoryException: Out of memory

まとめ

OutOfMemoryExceptionは、メモリの割り当て失敗によって発生する深刻な例外です。try-catchで捕捉することでエラー情報を記録したり、ユーザーへ適切なメッセージを表示したりできます。ただし、根本的な解決策としては、不要なオブジェクトの解放、大きなデータの分割処理、StringBuilderなどの容量設定の見直しといったメモリ使用量の最適化も併せて検討しましょう。

  1. KMODE_EXCEPTION_NOT_HANDLEDエラーとは?Windows 10での原因と4つの直し方

    KMODE_EXCEPTION_NOT_HANDLEDエラーとは? 「KMODE_EXCEPTION_NOT_HANDLED」エラー(バグチェックコード:0x0000001E)は、カーネルモードで動作しているプログラムが、エラーハンドラーが処理できない例外を発生させたことを示すブルースクリーン(BSoD)エラーです。仕組みはやや複雑ですが、簡単に言えば、アプリやプログラムが互いのメモリ領域を上書きしてしまうことで発生し、さまざまなエラーやシステムクラッシュにつながります。 関連記事:おすすめの無料PCチューンアップソフト KMODE_EXCEPTION_NOT_HANDLEDエラーの主な原因

  2. Windows PCのメモリを最適化してシステムキャッシュを管理する方法

    Windows PCは、ちょっとしたコツさえ覚えれば誰でも快適に使えるユーザーフレンドリーなマシンだとよく言われます。しかし実際には、Windows PCは非常に複雑な仕組みを持っており、Microsoftが一般ユーザーの目から隠している機能や設定が数多く存在します。その代表例が「メモリの最適化」と「システムキャッシュの管理」です。 メモリの最適化とは、RAM上の不要なデータを解放し、パフォーマンスを向上させることを指します。また、システムキャッシュには一時ファイルやフォルダが蓄積されており、これらを削除することで、新しいプロセスのための空き容量を確保できます。本記事では、Advanced S