|
■No25034 (なかた さん) に返信
> はじめまして。VB6.0でCSVをファイルマッピングで読み込み、
CreateFileMapping API 等でしょうか?
> Splitで改行コード(vbcrlf)で配列に分割するのに30秒〜40秒くらいかかります。
これはつまり、
Dim csv As String
csv = [サイズ40MB相当の文字列]
の処理は、(ファイルマッピング等により)数秒程度まで短縮できたが、その後の
list = Split( [サイズ40MB相当の文字列], vbCrLf)
の処理に、数十秒かかるという事でしょうか?
手元の環境で試してみましたが、15列×3.6万行の CSV データ
(サイズでいうと、45,961,380 バイト) のファイルでも、API 無しで
読み込みから Split まで、6 秒未満程度で完了するのですが…。
Option Explicit
Private CSV As String
Private rows() As String
Private Sub Command1_Click()
Dim before As Single
Dim after As Single
before = Timer
rows = Split(CSV, vbCrLf)
after = Timer
Debug.Print "Split:"; after - before, "("; before, after; ")"
End Sub
Private Sub Form_Load()
Dim before As Single
Dim after As Single
before = Timer
Dim stm As ADODB.Stream
Set stm = New ADODB.Stream
stm.Type = adTypeBinary
stm.Open
stm.LoadFromFile "C:\Book1.csv"
Dim b() As Byte
b = stm.Read(adReadAll) '
stm.Close
CSV = StrConv(b, vbUnicode)
after = Timer
Debug.Print " Load:"; after - before, "("; before, after; ")"
End Sub
|