VBで最も高速にHTMLソースを取得する方法を教えてください。お願いします。
条件なしにただ「最高速」ということなら、
レジスタやCPU内キャッシュを別にすれば、
一般にメモリアクセスが最高速ですから、
取得したいHTMLソースをあらかじめメモリ上に置いておいて、
ブロック転送してVBの変数に取得するのが最高速でしょう。
回答ありがとうございます。具体的にはどのようにすればよろしいでしょうか。教示ください。
今はあまり使用されない技術ですが、
ファイルをラムディスクに置いておくと簡単にメモリアクセスが使用できます。
Sayさんのおっしゃっているブロック転送よりは若干速度は落ちると思いますが、
扱いやすいので紹介しておきます。
その上でコード変換もおそらく必要になると思います。
コード変換は下で紹介されているStreamオブジェクトを使用した方法が、
私が試した限りでは最高速でした。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200308/03080100.txt
ぴろあきさん回答ありがとうございます。
恐縮ですが、streamオブジェクトからHTMLソースを取り出す方法を
教えていただけないでしょうか?
それから、現在、私は上記URLのやり方の、responsetextからソースを
得ておりますが、この作業を何千回と繰り返すと、決まってプロセスが
スタック(用語が適切かどうかわかりませんが、要するに重くなって
素早く動かなくなります)してしまいます。これを回避するにはどの
ようにすればいいでしょうか?教えていただけますでしょうか。
よろしくお願いいたします。
>streamオブジェクトからHTMLソースを取り出す方法
Open ReadDirn & <ファイル名> For Binary Access Read As #[ファイル番号]
sl = LOF([ファイル番号])
ReDim S(sl - 1)
Get #[ファイル番号], , S
Close #[ファイル番号]
'EUC→Unicode変換
'EUCコードのストリームを作成
Set Stm = New ADODB.Stream
Stm.Open
Stm.Type = adTypeBinary
Stm.Write S 'ストリームに、バイトデータを書き込む
Stm.Position = 0
Stm.Type = adTypeText
Stm.Charset = "EUC-JP" 'バイトデータの文字コードを指定
strUnicStr = Stm.ReadText() 'String型のデータとして取り出す
私は上のように、一度バイト配列に読み込んでから変換してますが、
LoadFromFileメソッドを使用すれば、もっと高速になるかもしれません。
LoadFromFileメソッドを使用するやり方はわかりません。
>これを回避するにはどのようにすればいいでしょうか?
どのようにプログラムを組んでいるのか知りませんが、
メモリを解放し忘れている事が原因と考えられます。
メモリを解放することで、回避できるようになるでしょう。
LoadFromFileの方法でやってみました。
速度は殆ど変わりませんでした(約1.03倍)。
Set Stm = New ADODB.Stream
Stm.Open
Stm.Type = adTypeBinary
Stm.LoadFromFile (<ファイル名>)
Stm.Position = 0
Stm.Type = adTypeText
Stm.Charset = "EUC-JP" 'バイトデータの文字コードを指定
strUnicStr = Stm.ReadText() 'String型のデータとして取り出す
ぴろあきさん
丁寧なご回答ありがとうございました。
蛇足ですが、プロセスがスタックの件は、
XP SP1適用 ノート(IBM) 最後まで実行
XP SP2適用 デスクトップ(DELL) プロセスがスタック
となりました。
私個人としては、SP2の適用に問題があると思っています。
(ノートの方が明らかにスペックが低いので)
ツイート | ![]() |