私は単純なC#アプリケーションでCSVファイルをSQLiteデータベースに読み込んでいます。例外をスローせずにSQLiteがメモリ不足になる
データが読み込まれると(この時点でデータベースファイルは約5GBです)、すべてのデータを含む単一のテーブルにインデックスを作成します。インデックスの作成中に
SQLite error (6154): os_win.c:41445: (8) winMapfile2() - Not enough storage is available to process this command.
エラーメッセージが数秒の間、それ自体が百倍のカップルを繰り返し:
CREATE INDEX index_name ON table_name(col_a, col_b ASC)
は、私は、Visual Studioのデバッグ出力ウィンドウに次のエラーメッセージを見ることができます。 sqlite3_io_methodsオブジェクトの xFetch又はxUnfetchメソッド内でI/Oエラーを示す
(6154)SQLITE_IOERR_MMAP
SQLITE_IOERR_MMAPエラーコードがSQLITE_IOERRため 拡張エラーコードである:The SQLite documentationは、以下を言います データベースファイルの一部をプロセス のアドレス空間にマップまたはマップ解除しようとしています。
私のハードドライブはまだ30ギガバイトについてのコマンドを実行している間、プロセスは専用メモリの300メガバイト程度使用され、残っている、とコンピュータの少なくとも30%使用可能な物理メモリがあるので、私はなぜわからないんだけどそれはまったく起こります。
例外はスローされません。デバッグコンソールにのみ出力されます。インデックスはデータベース内で正しく作成されているようです。これは、エラーメッセージが有害ではないことを意味しますか?私はそれを無視してもいいですか?何か問題が生じた場合に実際の例外をスローすることはできますか?私のデータベースはかもしれないが壊れているのは怖いと思う。
偉大な、ちょうど私が必要とした情報。ありがとうございました! –