2016-05-03 43 views
0

Windows 7 64ビット版でDelphi 7 Enterpriseを使用しています。 私のコンピュータには16 GBのRAMがあります。kbmmemtable LoadFromDataset後のEOutOfMemoryエラー

kbmMemTable 7.70.00 Professional Edition(http://news.components4developers.com/products_kbmMemTable.html)を使用しようとしています。

私のテーブル150,000レコードを持っていますが、私はそれだけでコピーkbmMemTableに29000件のレコードをデータセットからデータをコピーしようと、私はこのエラーを取得するとき:EOutOfMemory

を、私はこのメッセージを見た: https://groups.yahoo.com/neo/groups/memtable/conversations/topics/5769、 をそれ私の問題は解決しなかった。

+0

あなたがコードでそれらを生成することによって、あなたのKbmMemtableにレコードの同じ番号を追加しようとした場合はどうなりますか? – MartynA

+0

デルファイ7は、コンピュータのインストール量に関係なく、最大2GBのメモリしかアクセスできません。これは32ビットアプリケーションです。データセットの各行にはいくつの列がありますか?列のサイズはどれくらいですか?それらがすべて非常にワイド文字列でない限り、150K行は多くありません。テーブルの列定義を含めるには[編集]してください。テーブルにどれくらいの大きさのレコード*があるかを知ることができます。 –

+0

ありがとう、私のデータセットはこのCodeArt(Varchar(15)NUmBL整数)のような2行しかありません。このコードでデータセットからロードします。 KBMTable1.LoadFromDataSet(IBQuery1、[mtcpoStructure]); – Touhami

答えて

0

メモリのうちは、さまざまな理由で発生します

  • アプリケーションは、一般的にあまりにも多くのメモリを使用しています。 FastMMメモリマネージャを使用して1.4GBを割り当てた場合、32ビットアプリケーションは通常メモリ不足になります。他のメモリマネージャは、より悪いまたはより良い範囲を持つ可能性があります。
  • メモリ断片化。要求された1つの大きな割り当てに対して、メモリに十分な領域がない可能性があります。 kbmMemTableは、約200000 x 4バイトを1つの大きな割り当てとして割り当てようとします。独自の最大の単一割り当てとして。それは問題ではないはずです。
  • 上記のメモリ断片化につながる小さすぎる割り当てが多すぎます。 kbmMemTableは、Performanceプロパティの設定に応じてレコードごとに1〜nブロックのメモリを割り当てます。 パフォーマンスが高速に設定されている場合、1つのブロックが割り当てられます(blobフィールドが存在しない場合は、null以外のblobフィールドごとに追加の割り当てが行われます)。 パフォーマンスが均衡または小さい場合、各文字列フィールドはレコードごとに別のメモリブロックを割り当てます。

よろしく キム/ C4D

+0

あなたの答えはKim/C4Dにありがとうございますが、この問題を解決するために何ができますか? – Touhami

関連する問題