10

Windows スタートアップで実行するオプションを持つアプリケーションを作成しています。

PC が本当に落ち着く前に、アプリケーションが動かなくなってしまうのは我慢できません。これは重要ではないアプリケーションです。アプリケーションが他のすべてのスタートアップ項目が終了して安定するのを丁寧に待って、ユーザーの PC が応答してから作業を開始するようにしたいと考えています。

この状態を検出するにはどうすればよいですか? レジストリを調べて、実行中のすべての起動プロセスを探すか、長いタイマーを使用することができると思います。私が使用できるハックの少ない別のトリックがあることを願っています。

編集: アプリケーションには UI があり、サービスとして実行できません。トレイモードがあります。いくつかの画像レンダリングを行います。

4

4 に答える 4

4

「長い」タイマーが最適なルートです。私ははしけでレジストリに触れません。

ただし、ユーザーが自分でプログラムを起動したい場合はどうなるでしょうか。明らかに、遅延を引き起こしたくありません。

あなたのアプリケーションにはUIがあると思いますか? そうでない場合は、Vista/7 で開始タイプが「自動 (遅延)」に設定されたサービスを検討できます。

この関連する質問も参照してください: How to create delay startup application in c#?

最後に、プログラムが重要ではなく、速度が低下するのではないかと心配している場合は、アプリケーションの優先度を下げることを検討してください。

于 2012-05-08T15:41:37.723 に答える
2

これは、ユーザーの手に委ねるのが最善のタイプのようであり、Windows は、少なくとも Windows サービスについては、これを制御するための適切なオプションを既に提供しています。

これが Windows サービスの場合、サービスを自動 (遅延開始) で開始するように構成できます。

おそらくそれが最良の選択肢ですか?

その道をたどりたくない場合、またはプログラムが Windows サービスではない場合、Windows がいつ「安定」したかを検出することは非常に主観的であり、エラーが発生しやすくなります。ある程度信頼できる指標としてディスク IO を監視できます。ディスク IO は通常、起動時のボトルネックです (特に SSD OS ドライブのないシステムの場合)。ディスク IO (パフォーマンス カウンターで示される) が特定のしきい値を下回るのを待っていると、「安定度」の妥当な概算が得られる場合があります。一部のシステムが起動し、IO サブシステムに負担をかける無関係で長時間実行されるタスクを実行し始める可能性があるため、構成可能な時間より長く待機せず、とにかく開始することをお勧めします。

于 2012-05-08T15:42:48.893 に答える
1

2つの提案:

  1. 優先度の低いスレッドを使用して作業を行います。結局のところ、それは優先度が低いですよね?これだけでも、起動時の影響を最小限に抑えることができます。
  2. 物事が落ち着くのを本当に待ちたい場合は、レジストリの読み取りをすべて実行したり、任意の時間待機したりするのではなく、プロセッサとメモリの使用率を確認してください。その手順はここにあります:C#でCPU使用率を取得する方法は?

幸運を!

于 2012-05-08T16:07:21.590 に答える