Windows では、ターミナルでのプロセスの一覧表示がなぜこんなに遅いのでしょうか? これを高速化することはできますか?

Windows では、ターミナルでのプロセスの一覧表示がなぜこんなに遅いのでしょうか? これを高速化することはできますか?

最終的に、次のコマンドを思いつきました:

tasklist /V /NH | find "test"

実行中のすべてのプロセスを「詳細」情報とともに一覧表示し (必要なのは「ウィンドウ タイトル」なので、/V を使用する必要があります)、ヘッダー行をスキップし、これを「find」にパイプして、どこかに「test」が含まれるプロセスのみを一致させます。

これを入力しているときに、tasklist によって出力される行全体のどこかに「test」があるかどうかをチェックしていることに気づきました。これは意図したことではありません (ウィンドウのタイトル部分のみをチェックすることになっています)。ただし、これは二次的な重要性しかありません。「test」は実際には複数のスペースを含む文字列であり、行の残りの部分に現れる可能性は非常に低いため、実際には一致することはありません。

とにかく、上記のコマンドは文字通り数秒で実行されますが、これは「find」へのパイプのせいではありません。パイプなしで試してみました。この情報を取得するのが非常に遅いだけです。この情報は RAM に簡単に保存されているはずなので、ほとんど答えが得られるはずです。前にコマンドを発行していますが、どうやら複雑なロジックを実行していて、ディスク ストレージの大きな部分を読み取っているようです。(毎回数秒の読み込みを他にどのように説明できるでしょうか?)

「タスクリスト」のマニュアルを読んでも、「ウィンドウ タイトル」のみを気にし、それを出力したいだけであることを指定する方法はありません (その方が高速になる場合があります)。

特定の「イメージ」(EXE) でフィルタリングするとはるかに高速になることに気付きましたが、これは「ウィンドウ タイトル」(「プロセス タイトル」とも呼ばれる) のみをチェック/考慮することになっているため、その方法は望ましくありません。

何か良いアイデアはありますか?

答え1

を使用すると、ウィンドウタイトルでフィルタリングできます/FI "WINDOWTITLE eq Window Name"。ただし、それほど高速ではありません。

PowerShell を使用すると、同じことをはるかに高速に実現できます。

get-process | where-object {$_.mainWindowTitle -like "test*"}

約 1 秒以内に完了します。

関連情報