Upgrade to Pro — share decks privately, control downloads, hide ads and more …

パフォーマンス Tips ~その変数 Variant 型では?~

パフォーマンス Tips ~その変数 Variant 型では?~

変数のタイプを Variant から変えることでコードのパフォーマンス改善につながる可能性について言及しています。

2019年3月7日開催の「のの会 第12回」で使用した資料です。

Haruyuki Nakano

September 08, 2022
Tweet

More Decks by Haruyuki Nakano

Other Decks in Programming

Transcript

  1. これらのコードの大きな違いとは? 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
  2. 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
  3. 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
  4. 処理時間の違い 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
  5. 処理時間の違い 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
  6. 処理時間の違い 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
  7. 処理時間の違い 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倍以上!!
  8. 「接尾辞」と「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 型 (なし)