ソモサン

私rohkiによる活動や読書の記録をつらつらと書くページです

Rust で Windows のパフォーマンスカウンターをとってみる

前回作った車輪の再発明!! 言い訳はしない!

GitHub - ROki1988/perf_client

色々頑張った結果…

fn main() {
    let path_list = vec!["\\Memory\\Available Mbytes"];

    if let Some(pdhc) = PdhController::new(path_list) {

        let m = pdhc.current_values();

        println!("{:?}", m);
    }
}

main 関数がこうなりました。だーいぶ隠せたかな?

大まかな流れ

とりたいメトリクスの PATH 配列を入力として、カウンター取得のための構造体を作成。
current_values() を呼び出すたびにそのタイミングでの値が Vec で返ってくる寸法。
PDH_HQUERY の開放も、 PdhController がスコープ外になって消えるタイミングでやるように trait を実装。

改善すべき点

  • 一番最初の HCOUNTER 取得から PdhController 生成の部分が胡散臭い。
  • PATH の部分を文字列でなく PDH_COUNTER_PATH_ELEMENTS の wrapper なりにすれば、もうちょい使いやすくなるかも。
  • 値を返すのでなく、値を順繰りとれる iter は実装中。

iter ができたら、送信部分つくってみるかー