Slide 1

Slide 1 text

LotusScript小噺 あなたのコードが高速になる Tips 中野晴幸 @harunakano harunakano.blogspot.com

Slide 2

Slide 2 text

これらのコードの大きな違いとは? Dim i As Long i = 0 For i = 1 To 100000000 i = i + 1 Next Dim j As Variant j = 0 For j = 1 To 100000000 j = j + 1 Next k = 0 For k = 1 To 100000000 k = k + 1 Next

Slide 3

Slide 3 text

Dim i As Long i = 0 For i = 1 To 100000000 i = i + 1 Next Dim j As Variant j = 0 For j = 1 To 100000000 j = j + 1 Next k = 0 For k = 1 To 100000000 k = k + 1 Next 変数の型が違う 型の宣言なし = Variant

Slide 4

Slide 4 text

Dim i As Long i = 0 For i = 1 To 100000000 i = i + 1 Next Dim j As Variant j = 0 For j = 1 To 100000000 j = j + 1 Next k = 0 For k = 1 To 100000000 k = k + 1 Next バインディング 早期バインディング 遅延バインディング 遅延バインディング 型の宣言なし = Variant

Slide 5

Slide 5 text

バインディング とは  オブジェクトを変数名に割り当て るプロセス  2つのタイプ  早期バインディング[early binding]  遅延バインディング[late binding]

Slide 6

Slide 6 text

早期バインディング  コンパイラによって設定される  型のチェックを使用し、素早く動作する

Slide 7

Slide 7 text

遅延バインディング  遅延バインディングは実行時に設定される  柔軟だが型チェックを使用せず、ランタイムエラーが発生する可能性がある  型を Variant で宣言したり、型を宣言していない場合、遅延バインディングとな る  早期バインディングに比べ処理時間が長い

Slide 8

Slide 8 text

処理時間の違い Dim i As Long i = 0 For i = 1 To 100000000 i = i + 1 Next 処理時間(秒) 早期 遅延 遅延 1回目 2回目 3回目 平均 Dim j As Variant j = 0 For j = 1 To 100000000 j = j + 1 Next k = 0 For k = 1 To 100000000 k = k + 1 Next

Slide 9

Slide 9 text

処理時間の違い Dim i As Long i = 0 For i = 1 To 100000000 i = i + 1 Next 処理時間(秒) 早期 遅延 遅延 1回目 64 66 2回目 65 65 3回目 64 64 平均 64 65 Dim j As Variant j = 0 For j = 1 To 100000000 j = j + 1 Next k = 0 For k = 1 To 100000000 k = k + 1 Next

Slide 10

Slide 10 text

処理時間の違い Dim i As Long i = 0 For i = 1 To 100000000 i = i + 1 Next 処理時間(秒) 早期 遅延 遅延 1回目 3 64 66 2回目 4 65 65 3回目 3 64 64 平均 3 64 65 Dim j As Variant j = 0 For j = 1 To 100000000 j = j + 1 Next k = 0 For k = 1 To 100000000 k = k + 1 Next

Slide 11

Slide 11 text

処理時間の違い Dim i As Long i = 0 For i = 1 To 100000000 i = i + 1 Next 処理時間(秒) 早期 遅延 遅延 1回目 3 64 66 2回目 4 65 65 3回目 3 64 64 平均 3 64 65 Dim j As Variant j = 0 For j = 1 To 100000000 j = j + 1 Next k = 0 For k = 1 To 100000000 k = k + 1 Next 20倍以上!!

Slide 12

Slide 12 text

よくある省略の誤り Dim i, j, k As Long

Slide 13

Slide 13 text

よくある省略の誤り Dim i, j, k As Long ここ! Variant です!

Slide 14

Slide 14 text

「接尾辞」と「Deftypeステートメント」 Dim i&, j&, k& DefLng i-k Dim i, j, k ステートメント データ型 接尾辞 DefBool Boolean 型 (なし) DefByte Byte 型 (なし) DefCur Currency 型 @ DefDbl Double 型 # DefInt Integer 型 % DefLng Long 型 & DefSng Single 型 ! DefStr String 型 $ DefVar Variant 型 (なし)

Slide 15

Slide 15 text

明日からあなたのコードも20倍速!! になるといいね