性能改善に関する情報 — プログラミング言語 Ring 1.14 取扱説明書

Skip to content

# 性能改善に関する情報

Ring の性能改善方法です。

## リストの作成

用例:

    ? "Create the list using the Range operator"
    t1 = clock()
    aList = 1:1000000
    ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"

    ? "Create the list using the For loop"
    t1 = clock()
    aList = []
    for x = 1 to 1000000
            aList + x
    next
    ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"

    ? "Create the list using the list() function and the For loop"
    t1 = clock()
    aList = list(1000000)
    for x = 1 to 1000000
            aList[x] = x
    next
    ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"

実行結果:

    Create the list using the Range operator
    Time : 0.48 seconds
    Create the list using the For loop
    Time : 0.79 seconds
    Create the list using the list() function and the For loop
    Time : 1.56 seconds

注釈

リストの作成で for ループ、または list() 関数を使用するよりも、範囲演算子のほうが速いです。

注釈

リストの追加で add() 関数を使用するよりも、連結演算子‘+’を使用したほうが関数呼び出しのオーバーヘッドが少ないため速いです。ただしソースコードの可読性は落ちる場合があります。

注釈

処理に時間が掛かり過ぎるため copy() 関数で数十万件を超える大量のテストデータを作成しないでください。

## 算術演算子

用例:

    ? "Using * operator"
    t1 = clock()
    for x = 1 to 1000000
            out = x * 2
    next
    ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"

    ? "Using *= operator"
    t1 = clock()
    for x = 1 to 1000000
            out = x
            out *= 2
    next
    ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"

実行結果:

    Using * operator
    Time : 1.34 seconds
    Using *= operator
    Time : 0.47 seconds

注釈

* 演算子よりも *= 演算子を使用したほうが速いです。

## len() と For ループの使用

用例:

    aList = 1:1000000

    ? "Using len() in the For loop"
    t1 = clock()
    for x = 1 to len(aList)
    next
    ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"

    ? "Using len() before the For loop"
    t1 = clock()
    nMax = len(aList)
    for x = 1 to nMax
    next
    ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"

実行結果:

    Using len() in the For loop
    Time : 5.50 seconds
    Using len() before the For loop
    Time : 0.24 seconds

注釈

Len() 関数は For ループ内ではなく For ループの手前で使用したほうが早いです。

## 関数とメソッドの呼び出し

用例:

    ? "calling 100000 functions"
    t1 = clock()
    for x = 1 to 100000
            test()
    next
    ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"

    o1 = new test

    ? "calling 100000 methods using the dot operator"
    t1 = clock()
    for x = 1 to 100000
            o1.test()
    next
    ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"

    ? "calling 100000 methods using braces "
    t1 = clock()
    for x = 1 to 100000
            o1 { test() }
    next
    ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"

    func test

    class test
            func test

実行結果:

    calling 100000 functions
    Time : 0.28 seconds
    calling 100000 methods using the dot operator
    Time : 0.36 seconds
    calling 100000 methods using braces
    Time : 1.19 seconds

注釈

メソッドの呼び出しよりも、関数の呼び出しのほうが僅かに速いです。

注釈

メソッドの呼び出しで弓括弧を使用するよりも、ドット演算子を使用したほうが速いです。