処理時間の計測について

.netのStopwatchクラスを使って、今まで6502の処理時間を計測してたのですが、測定の仕方がまずかったようです。

1スキャンラインの時間に相当するクロック数だけ6502コアを駆動したら、PPUなどのタスクに処理が移るようにしてたので、6502の処理時間測定もその短い間隔で差分を累積していくようにしてました。
Stopwatchは精度が高い反面、呼び出し自体が割と重いみたいで、時間測定間隔が短く何度も繰り返し呼んだ場合に、Stopwatch内部で消費される時間が無視できない長さになるようです。

測定方法を見直した所、1フレーム分の6502の処理を0.2msで処理できていることが確認できました。目標値である0.08msには届いてませんが、なかなかの数値かもしれません。実機での16.6msを0.2msで処理してるので、83倍速です。
CPU自体の速度では、私のパソコンはCore2duoの2GHzなので、ファミコンの6502より多分1000倍は速いはずです。だったら最低でも100倍速ぐらいは出したいところです。これじゃあソースに逆変換してるのに、C言語アセンブラカリカリにチューンされてるエミュレータに速度で負けてる気がします。

バグによって、意としないタイミングでエミュレーションモードに切り替わってしまっている場合があるみたいなので、それを直したらもう少し縮まりそうです。