IME の基本性能を向上させる手法 - RADAR
こんにちは。
今回は、IME チームで行っているソフトウェアの基本性能を向上させるための手法、RADAR、を紹介したいと思います。
以前、IME は母体となるアプリケーションと共に動作しているというお話をしましたが、そのような性質ゆえに重要な問題となるものにメモリ リークがあります。たとえば、Notepad と共に動作している IME がメモリ リークを起こしたとしてもさほど気にする人はいないかもしれません。Notepad を終了させれば、そのメモリ リークは解消されるからです。しかし、Explorer と共に動作している IME がメモリ リークを起こしていたとしましょう。いつしかシステムは重たくなり、リブートしない限り使いものにならない状況になってしまうことでしょう。そしてそれは永遠に繰り返されることになります。つまり、単体で動作しているアプリケーションではさほど気にならないメモリ リークであっても、IME にとっては重要度が高くなるといえると思います。
しかし、メモリの使用量が増えるからと言って、即座にメモリ リークが発生したと言うことはできません。コードの中で行われているデータ キャッシュが適切に動作しているために一時的なメモリ使用量が増えているだけの場合もあるでしょう。また、メモリ リークによってメモリの使用量が増えていたとしても、コードの中からその場所を特定するのは困難な作業になります。
RADAR は、メモリ リークを検出する Windows の機能です。IME チームは、この RADAR を使い、メモリ リークに分類される問題の中の参照不可能なメモリを検出し、IME の基本性能の向上を行っています。
メモリ リークには、その種類によっていくつかに分類されます。メモリは、malloc() や new などにより確保することができ、アドレスを格納した変数を介して使用することができます。確保したメモリが解放される前に、そのアドレスを格納している変数がなくなってしまうと、コードの中ではそのメモリへアクセスする手段を失います。これにより、参照不可能なメモリが発生します。C# などのマネージ コードであれば、ガーベージコレクションという機能により解放されるメモリです。ネイティブ コードで記述されている IME では、適切なメモリの確保、解放が必要になります。
残念ながらここで紹介した RADAR は、Microsoft 社外の方々には、まだその本来の機能を提供できていないようです。Windows 用デバッグ ツール に含まれている UMDH を使うことで似たようなことは行うことができると思いますので参考になれば幸いです。
RADAR も、IME を支えている Microsoft の技術の1つになります。
松原 司牧