ここに物語です:wledfのOledbに大きなExcelファイルに関する問題がありますか?
Excelシートをデータベースにインポートします。 ファイルの選択、正しいシートとシートの構成など、クライアントでいくつかの準備をします。
これがすべて完了したら、私のローカルwcfサーバーにファイルを送信します。
次に、wcfはファイルを一時フォルダ(C:\ Windows \ Temp)に書き込みます。
oledb接続を作成し、シート上でcount(*)コマンドを実行します。これが間違っています。
コード:
_connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"");
OleDbCommand command = new OleDbCommand("SELECT COUNT(*) FROM [" + .SheetName + "]", _connection);
if (_connection.State == ConnectionState.Closed)
_connection.Open();
TotalRows = (int)command.ExecuteScalar();
はい、私はここで使用してを使用していないよ、(int)command.ExecuteScalar();
が実行されるとしてください...
それがうまくいかないことを気にしません。
エラーメッセージ:System resource exceeded.
が表示されます。これはOleDBExceptionです。
コンピュータのメモリがいっぱいになっていないため、ファイルを読み取ろうとしても表示されません。すぐにクラッシュします。
私は読んしようとするファイルに関するいくつかの情報:
- それは114列
- サイズが154K行
- を持っている私はのサブセットを取る場合
90MBですこの50k行は、クラッシュしません。
TotalRowsは2536だと言われていますが、
最初は私のファイルが壊れていましたが、まったく同じコードがクライアント上で全く同じファイルで動作していたからです。
2500行のサブセットを取得すると、すべてうまくいって問題が発生します。私は2600行のサブセットを取る場合は、行数はまだ私の質問2536.
ある
を(その行は関係ありません):
- 間違って起こっていますか?
- エラーとその結果の間違いは誰が責任を負いますか?
- なぜクライアント上で動作しますが、私のサーバ上で動作しません(同じマシン!)
- 小さいファイルでクラッシュしないのはなぜですか?
詳細情報が必要ですか?コメントを残してください。
更新1:
クライアントとサーバーの両方が32ビットアプリケーションとして実行されます。
簡単な質問;サーバーは32ビットモードで動作しますか?クライアントは64ビットモードで動作しますか? – Alxandr
@Alxandr:更新内容を確認してください。 – Mixxiphoid