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