今回、PDFCreatorのソースをみていて気になったのがやたらと出てくる$マーク。UCase$とかOct$とかChr$とかMid$とかがものすごーく気になっていたわけですよ。ググってもひっかかりにくいし、VB6.0のヘルプは手元にないし、でもどうやらフツーに$記号ナシのUcaseやらMidと同じ動作をする。
悶々と々としていたのですが、ちょっと別のコトを調べていたら、スゴい記述をみつけてしまいました。英文サイトのFaster Visual Basic Programs。
マジでー?!
$マークつけた方が、処理早いの??? Σ(゚Д゚;≡;゚д゚)
Midの返り値はvariantなのに対して、Mid$の返り値はString型だから、という理由にはナットクしたものの、Mid$なんて隠し玉の存在を知りませんでした。$で文字列を返すというのは、Basicの名残っぽいですよね。
「….Netでも実験してみよー!」と一瞬、思ったものの、.Netに移行してから、Mid関数とかあんまり使わないかなぁ。(´・ω・`)
私の今の行動範囲で現実的にこの知識を生かせるのってむしろVBA?──というわけでAccess2003で実験してみました。
まずはMidとMid$対決の一千万回対決。
MID$の方がちょっと速いですね。
結果
MID :3277 ミリ秒
MID$:3011 ミリ秒
サンプルソース
フォームにtxtDATAという名前のテキストボックスを作って、そこにタイムを表示する。clsTimerMMクラスは「時間経過計測クラス‐VBA編」参照。
Dim ClsTimerMM As ClsTimerMM
Dim strTextMsg As String
'************************
Dim strData As String
Dim strGet As String
Dim lngMax As Long
Dim i As Long
'************************
Set ClsTimerMM = New ClsTimerMM
strData = "あいうえおかきくけこさしすせそ"
lngMax = 10000000
'************************
ClsTimerMM.SetStartDate
For i = 0 To lngMax
strGet = Mid(strData, "5", 1)
Next
strTextMsg = "MID :" & ClsTimerMM.ElapsedTime & vbCrLf
'************************
ClsTimerMM.SetStartDate
For i = 0 To lngMax
strGet = Mid$(strData, "5", 1)
Next
strTextMsg = strTextMsg & "MID$:" & ClsTimerMM.ElapsedTime & vbCrLf
'************************
Me.txtDATA.Value = strTextMsg
Set ClsTimerMM = Nothing
参考
同類な関数
Chr ChrB CurDir Dir Format Hex Input InputB LCase Left LeftB Mid MidB Oct Right RightB RTrim Space Str String Trim UCase
0 件のコメント:
コメントを投稿