Mac de sigmarionII

高速化(GLYPHCACHEの最適値)

PCの高速化、というとまず頭に浮かぶのはクロックアップです。でも、これは危険な上に、保証もきかなくなります。
その上、今のPCは昔のようにクリスタルの交換ではクロックアップできません。ごま粒のような抵抗の付け直しを覚悟しなくてはなりません。

不器用な大西にはまず不可能な改造なので、これはパス。(^_^;

ということで、レジストリの書き換えで対応したいと思います。

デフォルトでの速度を測定する。(速度の謎)

HKEY_LOCAL_MACHINE\SYSTEM\GDI

のLimitというDWORD値を見ると、デフォルトでは00008000(32768)となっています。
ここを書き換えてフォントのキャッシュを増やすことによって、高速化します。

その前に、書き換えた後の速度と比較するために、まずデフォルトの速度を測定してみました。
使用したのはDBenchというベンチマークソフトです。

1回目

 

259でした。

キャッシュが効いてるか調べるためにもう1度

2回目

 

215です。

ほとんど同じです。ということは、Textのキャッシュは効いてません。

ところが、Text drawだけテストすると

 

1106!

あれ????

 もう1度、全部のテスト

 

136

もとに戻ってる????
というか、遅い。

謎を解く鍵は、キャッシュの特性にあるようです。

GLYPHCACHEは、単なるフォントキャッシュではなくて、グラフィックなどもキャッシュしているようです。
グラフィックを表示してからテキストを表示させると、グラフィックでキャッシュがいっぱいになって、遅くなるのではないのでしょうか。
ところが値をかえて、ベンチマークをとったら、またまた???

値16000

 

に設定。

 

 デフォルトに比べて高速化されました。

値24000

 

 さらに高速化。

値32000

 

 ゲッ!遅くなった。再度計測しましたが、結果は同じでした。
 体感的にも明らかに遅くなってます。

値40000

 

 あれ?また高速化。

値48000

 

 あれれ???遅くなってる。体感的にも、アイコンの表示が遅くなってます。

原因はわかりませんが、キャッシュを大きくしても高速化に効果的とは限らないようです。
それに値2400と値4000と速さは同じくらい(^_^;

最適値は2400と1600の間くらいにありそうです。

そこで、
値20000で計測しました。

 

 このへんが速そうです。

念のため、値28000に増やしてみました。

 

やっぱり遅くなってます。

 

結果をまとめてみると、下図のようになりました。(デフォルトは8000でした)

Cache Int calc double calc Circle draw Rectangle draw Text draw Scroll
8000 1517 578 297 390 259 13
16000 1658 575 366 1819 738 9
24000 1628 579 307 1736 1259 16
32000 1703 572 294 417 273 14
40000 1675 578 346 1715 1188 11
48000 1658 572 290 397 265 14
20000 1700 579 298 1859 1233 17
28000 1610 580 302 389 255 13

キャッシュの増加が必ずしも高速化に貢献しないのがわかります。(原因不明:多分、キャッシュを増やしすぎ
るとシステムの動作にに障害を起こすのでしょう)

結論
キャッシュの大きさは16進で20000くらいがいいようです。
大西は20000にして使っていますが、障害は出ていません。

 

キャッシュの謎ですが、PDA-JAPANでどろんぱさんが原因を書きこんでくださいました。
「キャッシュって一時退避したものと必要とされるものが合致する必要があると思います。キャッシュが大きすぎると命令に対して既存キャッシュの検索に必要な時間がかかってしまうのでは?」

なるほど。どろんぱさん、ありがとうございました。