先日のMicrosoft開発マネージャーEric Knox氏による記事で、VS2012の編集パフォーマンスの内部的な改良を深く掘り下げている。Knox氏のチームは、PerfWatsonをさらに使用するアプローチを進化させ、Immediate Delay Tracker (IDT)と呼ばれる新しいツールを組み込んだ。
PerfWatsonは、"[Microsoft]が特定のポイントで実行されるVisual Studioのコードを[特定する]ためのミニヒープダンプ"を収集する。エンジニアはキーストロークごとにVSのパフォーマンスをモニタしたかったため、Event Tracing for Windows (ETW)を利用して"より細かくシステムを計測できる"IDTを開発した。
ETWはOSが提供する汎用的で高速にトレース機能である。カーネルに実装されたバッファリングとロギングのメカニズムを使って、ETWはユーザーモードアプリケーションとカーネルモードデバイスドライバの両方で発生したイベントをトレースできるメカニズムを提供する。さらにETWは、動的にログイングを有効にしたり、無効にしたりする機能を提供しており、リブートやアプリケーションの再起動することなく、簡単に製品環境で詳細トレースを取得することができる。
ETWベースのアプローチの優位性は、Knox氏によると"PerfWatsonのようなシングルスタックの代わりに、[チーム]は毎ミリ秒コールスタックを取得して、収集したスタックのコレクションを分析することができた。"VSで作業しているエンジニアは、影響を最小限で便利なパフォーマンス情報を取得することができる。Knox氏のチームは、Microsoft社内のVSユーザーをモニターして、修正版を実装した後、以下のパフォーマンス向上をドキュメント化した:
Visual Studio 2010
Current
C#
50ms以上のキー
15.05%
7.87%
100ms以上のキー
10.26%
0.62%
200ms以上のキー
1.50%
0.06%
C++
50ms以上のキー
11.85%
0.48%
100ms以上のキー
7.88%
0.20%
200ms以上のキー
6.85%
0.07%
VB
50ms以上のキー
0.83%
0.60%
100ms以上のキー
0.13%
0.06%
200ms以上のキー
0.06%
0.06%
現在、VS 2012 RCが 提供されているため、読者のみなさんは、製品を使ってこれ自身と、それらの見た目がどのように変更されたのかを確認することができる。