はい、関数キャッシュを使用すると、最初の呼び出し後に関数の結果がキャッシュされ、後続の呼び出しはキャッシュから直接取得できるため、高価な関数のパフォーマンスが大幅に向上します。テスト ケースを作成して、キャッシュ ヒット率のチェックなど、キャッシュが期待どおりに動作することを確認します。キャッシュされたバージョンとキャッシュされていないバージョンの実行速度を比較するベンチマークを使用して、キャッシュによるパフォーマンスの向上を定量化します。
Go での関数キャッシュの使用は、特にパフォーマンスを向上させる効果的なテクノロジです。関数の実行にコストがかかる場合。関数キャッシュを使用する場合、関数への最初の呼び出しで実際の計算が実行され、後続の呼び出しでは結果がキャッシュから直接取得されます。
キャッシュが期待どおりに動作することを検証するテスト ケースを作成することが重要です。基本的な関数キャッシュをテストする例を次に示します。
import ( "testing" "time" ) // fibonacci 计算斐波那契数 func fibonacci(n int) int { if n <= 1 { return n } return fibonacci(n-1) + fibonacci(n-2) } // fibonacciWithCache 使用缓存的斐波那契函数 var fibonacciWithCache = cache.Memoize(fibonacci) func TestFibonacciCache(t *testing.T) { tests := []struct { input, expected int }{ {1, 1}, {2, 1}, {5, 5}, {10, 55}, } for _, test := range tests { start := time.Now() actual := fibonacciWithCache(test.input) elapsed := time.Since(start) if actual != test.expected { t.Errorf("Expected %d but got %d", test.expected, actual) } // 检查缓存命中率 if elapsed > 50*time.Microsecond { t.Errorf("Expected cache hit but got cache miss") } } }
ベンチマークは、関数キャッシュによるパフォーマンスの向上を定量化するのに役立ちます。フィボナッチ関数のキャッシュされていないバージョンとキャッシュされたバージョンをベンチマークする方法は次のとおりです:
func BenchmarkFibonacci(b *testing.B) { for i := 0; i < b.N; i++ { fibonacci(20) } } func BenchmarkFibonacciWithCache(b *testing.B) { for i := 0; i < b.N; i++ { fibonacciWithCache(20) } }
ベンチマークの出力では、関数のキャッシュされたバージョンがキャッシュされていないバージョンよりも大幅に高速に実行されることがわかります:
BenchmarkFibonacci 2000 15253256 ns/op BenchmarkFibonacciWithCache 5000000 947242 ns/op
以上がgolang 関数キャッシュのテストとベンチマーク分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。