今回、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 件のコメント:
コメントを投稿