性能評価・プロファイリング
関数の入口と出口に時間を測るコードを入れて記録する計測(インストルメンテーション)方式のプロファイラについて正しいものはどれか。
- A記録の処理には時間がまったくかからない
- B呼ばれた回数などを正確に記録できるが、記録の処理そのものが時間を使い、特に小さな関数の多いプログラムでは結果がゆがむことがある
- C関数の入口と出口は、どのプログラムにも存在しない
答えと解説を見る
正解:B. 呼ばれた回数などを正確に記録できるが、記録の処理そのものが時間を使い、特に小さな関数の多いプログラムでは結果がゆがむことがある
計測方式では、すべての関数の呼び出しを記録するので、回数や呼び出しの関係を漏れなく正確に知ることができます。しかし、記録のための処理が関数の呼び出しのたびに加わるので、小さな関数が非常に多く呼ばれるプログラムでは、記録の時間が本来の処理の時間を上回ることもあります。そのため、時間の割合はサンプリング方式で、正確な回数は計測方式で、と使い分けます。
- A. 記録のための命令が実行されるので、時間がかかります。
- B. 正しい。測ることで測る対象が変わってしまう例です。
- C. 関数には必ず入口と出口があります。