質問: param2}).FirstOrDefault() End Using ``` 一見無作為に、時々、 `connection.Query`の呼び出し`System.AccessViolationException in System.Data.dll`に`System.AccessViolationException in System.Data.dll`し`connection.Query` 。この例外はアンマネージコードによってスローされるはずですが、アンマネージコードは*直接*使用しないため、 `Query`呼び出し後に発生します。また、マルチスレッドに関連する問題ではないことを確認したいと思っていましたが、ドキュメントを正しく理解していれば、クエリごとに1つの`IDbConnection`使用するとスレッドセーフでなければならず、Dapperもスレッドセーフであるはずです。 このエラーは、同じクエリやPOCOタイプでは必ずしも発生するとは限りません。ハードウェアの問題ではないでしょう(CPU <50%、メモリ<75%、プロセスは250 MB以上を消費しません)。 SQL Serverへの`SqlConnection`上の同様のコードに関する問題はまだ見ていません。 さらに、私はVS Express 2012で作業していますので、「例外でブレーク」を設定しても、例外アシスタントを使用してトラブルシューティングを行うことはできません。メモリ関連の例外であるため(私はOutOfMemoryExceptionをキャッチしたくないため)、スタックの上に例外をキャッチしたくないことは明らかです。 私は何か間違っているのですか?これは時々だけ発生するので、これをデバッグする方法はありますか?これはDapperやOleDbエンジンのバグでしょうか?
回答: 私は、この問題が複数のスレッドがAccess DBに衝突していると思われます。私が知っている限り、 `MS Access` **は** `multi-threaded`アプリケーション用に設計されて**いません** 。これは並行処理に制限があるためです。 そこには多くのドキュメントがありませんが、MS Accessは高いストレスと高い並行性のために設計されていないことを`here`で言及してい`here` 。 **編集** :コメントに基づいて 1. ステージングプロセスとしてアクセスデータベースをSQL Serverに直接ダンプし、ステージングテーブルのデータに対して.Netコードを実行してSQLの最終テーブルに入れることができます。 2. `SSIS data flow to manipulate the data`使用`SSIS data flow to manipulate the data` 。おそらく.Netコードのスクリプトタスクを使用します 3. `Reactive Extensions`がデータをストリーミングするためにバッファを使用して、大容量の2GBのCSVファイルで使用されているプロセスを見てきました。したがって、msアクセスデータをCSVにダンプすることができれば、メモリ内で同様のプロセスを実行できます。