2009-05-27 8 views
2

多くのWebページとRSSフィードを同時に監視し、定期的な頻度でポーリングしたいと考えています(すべて更新頻度が異なる可能性があります)。私はミラーリングしたい各ソースのスレッドを無限にループし、フェッチされたデータを処理した後に次のアップデートまでスリープすることを考えています。多くのWebページ/ RSSフィードの監視

誰かが良いアイデアを持っているか、それを行う方法の例がありますか?

答えて

0

タイマーを使用して1分(または5分)ずつキックします。タイマーのコールバックでは、チェックする必要のあるURLをループし、チェックが必要かどうかを確認します(コメントを入力すると、同期時間が異なります)。あなたは、URLとそのタイムアウトを保持するための適切な構造だけでなく、それ以降の最後の時間を準備することができます。

URLの同期が完了したら(時間が経過している)、非同期のHttpWebRequestを開始して取得します。そうすれば、受け取ったすべての部分をスレッドプールスレッドにオフロードするので、メインタイマーコールバックスレッドには影響しません。

応答に重い処理を行う場合は、HttpWebRequestコールバックで通常のスレッドを開始して追加の処理を行うか、何らかの種類のキューを実装したい場合があります。可能。ここで

は、非同期要求を行うためにどのように良い説明です:http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic23172.aspx

あなたにも多くの例については、Googleすることができますが、これは良いスタートです。

+0

詳細は、私は、彼らが実際に静かで良いですが、タイマーに考える(と、これまでにすべての答えで宣伝)が、ソースが常に同じ周波数で、または同時に更新するはずのなかったです。 – Dave

+0

各リソースにタイムアウトが設定されているとは述べていません。しかし、まだ、あなたは多くのタイマーを持つことができます - 同様のタイムアウトで1つのタイマーに多くのリソースをグループ化しようとします。また、レスポンスの処理を重視する場合は、非同期要求のコールバックで処理しないで、結果を処理するスレッドを開始して、すぐにスレッドを解放します。 –

+0

レスポンスが新しい要件を反映して変更されました。また、あなたの質問を編集してください。 –

0

10時間にすべてのスレッドをランダムに更新するのではなく、1時間ごと(10,20,30など)に10ですべてを更新するなど、1つのクロックで同期させるだけではどうでしょうか。ページ/フィードごとに1つのスレッドを作成する必要があるのはなぜですか?

0

Timerオブジェクトを使用すると、バックグラウンドで処理できるようにBackgroundWorkerThreadオブジェクトを使用してプロセスを起動できます。あなたが持っているフィードの数に応じて、より短い間隔で「ずらした」アップデートを行うことを検討するかもしれません。 5分ごとに、ワーカースレッドが起動し、監視するフィードのリストの次のフィードに行き、更新の有無を確認します。

いくつかのフィードリーダーから見たことがありますが、すべてのフィードを一度に更新することは、ユーザーインターフェースを少しフリーズする傾向があるため、常に最適な解決策とは限りません。

0

私は自分の説明したことを達成するためのウィンドウサービスを作成しました。 n分ごとにデーモンが起動し、取得する必要のあるURLを含むXMLファイルを読み取り、すべてのデータを処理してからn分間スリープ状態に戻ります。データを取得するためのスレッドと変更のXMLファイルを監視するスレッドがありました。 XMLファイルは、Webインターフェイスを通じて更新される可能性があります。

yxが指摘しているように、ページごとに1つのスレッドを作成する必要はありませんが、fecthに多くのURLがある場合、URLを100のパッケージに配布して(たとえば)すべてのパッケージ。デーモンを再度スリープ状態にする前に、最後のスレッドが終了するのを待たなければなりません。

-1

各ソースごとに1つのスレッドは、使い始めるには過剰なものです。第2に、スリープスレッドは貴重なメモリを浪費しています。スレッドの数>コアの数は、すべてのコアが時間のすべて(またはほとんど)を持つことをサポートするデータがない限り、正当化されません。

スレッドの数を決めるときは、将来の開発では10個以上のスレッドを追加したいと考えています。スレッドごとに10個のスレッドを追加します。このようにして、taskmanagerをチェックすれば、ひどく設計されたアプリケーションがたくさんのスレッドを作成する(各スレッド= 1MBのメモリ+追加のリソース豚)おそらく1GBのRAMが作成され、ほとんどの時間眠っている。そのため、ThreadpoolまたはAsync IOは、必要なときにシステムスレッドを再利用し、複数のアプリケーション間で共有する方法です。

以下は私の考えですが、実行し続けるスレッドやタイマーが必要です。非同期呼び出し(1つの呼び出しでブロックしないようにする)を実行するか、キューにすべてのスレッドプールを呼び出します。リフレッシュ期間に達したリフレッシュ元(おそらく本当に必要な場合は、少し時間がかかります)。 Asynchronous IO & Threadpool

+0

downvoteの理由は何ですか? –