【VB6】ファイルIOについて質問です。ファイル出力する際にメモリにデータを詰込みます。

メモリには使えるだけ詰込んでもうこれ以上はいらない!というところまで積み込み続け、
一気にファイルに書き込みたいと思っているのですが、できますか?

空想の狙いは速度アップです。
アドバイス宜しくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/05/20 21:27:16
  • 終了:2010/05/26 12:20:25

ベストアンサー

id:heke2mee No.1

heke2mee回答回数162ベストアンサー獲得回数432010/05/20 23:34:31

ポイント150pt

コメント欄が開いてないので、こちらで失礼します。


配列にデータを入れて最後にループで書き出すだけじゃないかな


このようにバッファサイズも指定できますが、どれぐらい効果があるか分かりません。

open "c:\test.txt" for output as #1 len = 32000 (最大値は 32,767だったはず)


書き込みの速度が原因ではなく、文字列の連結などで遅くなってませんか?


文字列の連結

http://blogs.wankuma.com/rti/archive/2007/01/08/55000.aspx



こちらも参考になるかも

open 書き込みバッファのデフォルトサイズ

http://bbs.wankuma.com/index.cgi?mode=al2&namber=4337&KLOG=14

その他の回答(2件)

id:heke2mee No.1

heke2mee回答回数162ベストアンサー獲得回数432010/05/20 23:34:31ここでベストアンサー

ポイント150pt

コメント欄が開いてないので、こちらで失礼します。


配列にデータを入れて最後にループで書き出すだけじゃないかな


このようにバッファサイズも指定できますが、どれぐらい効果があるか分かりません。

open "c:\test.txt" for output as #1 len = 32000 (最大値は 32,767だったはず)


書き込みの速度が原因ではなく、文字列の連結などで遅くなってませんか?


文字列の連結

http://blogs.wankuma.com/rti/archive/2007/01/08/55000.aspx



こちらも参考になるかも

open 書き込みバッファのデフォルトサイズ

http://bbs.wankuma.com/index.cgi?mode=al2&namber=4337&KLOG=14

id:ardarim No.2

ardarim回答回数892ベストアンサー獲得回数1422010/05/20 23:36:26

ポイント100pt

VB上からは直接そういうことを行うことは出来ません。Windows上で動作するアプリケーションの場合、確保したメモリはアプリケーションの意図によらずOSの判断で随時調節され、ページファイルに自動的にスワップアウトされます(オンメモリではなくなる)。


これを防止するには、VirtualAlloc APIでメモリを確保し、VirtualLock APIでロックする必要があります。VirtualLock APIでロックされたメモリはOSによってスワップアウトされることがなくなり、常にオンメモリ操作を行うことが出来ます。VB上からはこれらのAPIを直接呼び出す必要があります。

参考:VirtualAlloc [WinAPI Database for VB Programmer] VirtualLock [WinAPI Database for VB Programmer]


ただし、アプリケーションによってロックされたメモリはOSが最適な状態で利用することができないためシステム全体のパフォーマンスが落ちる可能性があります。またそのためにアプリケーションがロックできる最大サイズ(最大ワーキングセットサイズ)はあらかじめ決めれられていて、そのサイズを超えてはロックすることが出来ません。SetProcessWorkingSetSize APIを使って最大ワーキングセットサイズを変更することが可能です。

また最大ワーキングセットサイズを増やした場合でも、32bit Windowsの場合はアプリケーションが利用できる仮想アドレス空間の上限(2GB)を超えることは出来ません。

参考:32ビット WindowsOSでの仮想メモリの制限について(PDF)

id:khazad-Lefty No.3

khazad-Lefty回答回数181ベストアンサー獲得回数272010/05/21 12:31:33

ポイント75pt

一応、WshのWriteメソッドで書き込み自体はできると思います。

http://msdn.microsoft.com/ja-jp/library/cc428091.aspx

ただし、VB6の場合、文字列連結はコストが高いし、「データを積み込む」よりはその都度書き込むほうがスピードは期待できる気がします。

(要するにパフォーマンスを考えるとかえって良くない)そのあたりは回答1,2を参照ということで。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません