OutOfMemoryException について

初級者向けにおさらいします。

目次

この例外エラーの説明

プログラムが、使用できる空きメモリをどんどん確保して使っていって、最終的に、Out Of Memory(メモリを使い切ってしまうと発生する)Exception です。

事例とその対処方法

例外エラーは、想定外の扱われ方をすると発生して飛んで来ます。それは命令の使い方が間違っていたり、存在しないデータを扱おうとしていたり、アカウント権限を越えたアクセスをしようとしていたり(Windows 側やウェブ側の話だったり)、サービスが動いていないのに連携しようとしたり、製品上の仕様考慮モレだったり、そういう系です。

こうなっている前提のはずだから、こうやろうとしたのに、実際はここがこうなっているからダメじゃん!こういう場合の処理が無いじゃん!みたいなコードになっていませんか?

String

発生頻度が高いのは、String 変数を扱った大量の文字列処理です。通常は、大量の文字列操作をしたい場合は、String の代わりに、System.Text.StringBuilder を使います。手っ取り早くメモリを使い切るため無限再帰処理としてコードを設計しましたが、String であってもたいていはメモリ不足にはならないはずです。

Private Sub GetData(s As String)
    GetData(s & s)
End Sub

Sub Main()

    GetData("hello")


    Console.ReadKey()
End Sub
System.OutOfMemoryException: '種類 'System.OutOfMemoryException' の例外がスローされました。'

メモリは共有物ですのでエコなアプリの方がいいですが、中にはパワーが必要なアプリもあります。大量にメモリを使用することは悪いことではありませんが、使い過ぎには注意ですね。