C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 22 を表示中)
■9698 / )  Re[12]: System.Timers.Timerでのイ
□投稿者/ PATIO (35回)-(2007/11/02(Fri) 15:12:46)
2007/11/02(Fri) 15:18:42 編集(投稿者)
2007/11/02(Fri) 15:13:47 編集(投稿者)

No9695 (nbmyou さん) に返信
> XMLファイルはファイル名固定ではなく、複数のファイルが監視フォルダに置かれることを想定しています。
> 別に作成してあるプログラムからXMLファイルを出力するので、
> 基本的にはユニークな名前となるはずですが、監視フォルダ自体は特にアクセス制限をかけるわけではないので、
> 手動で同名ファイルが置かれることも考えられます。
>
> また、XMLファイルが作成途中(例えば大容量のファイルで、監視フォルダへのコピーに時間がかかっている状態)ではないことの判断は、
> 拡張子がaaa(仮)の同名ファイルが同じフォルダに存在するかどうかで判断します。
> +++++++++++++

この辺の融通がきくようにすればするほどシステム的なチェックとか誤動作しない為の仕組みとかが
増えていってどんどん複雑になると言う話です。
ある程度、運用側に制限をかける事が可能ならそっちに振ってシステムを簡単にした方がメンテは
やりやすくなると言う話ですのでケース・バイ・ケースかと思います。


> はい、イベント処理中に次のタイマイベントが発生した場合、後のイベントは何も処理しないように作成しようと思っています。
> ただ、ポーリング間隔・監視フォルダ・バックアップフォルダは、
> XMLかini形式の「設定ファイル」で自由に設定できる(デフォルトは5分程度)ように考えているので、
> この設定によって間隔が短くされる可能性がある状態です。
>
>>処理スピードがファイルを置くスピードよりも十分に速い事が保障できるのであれば、
>>仕組みを簡略化する事も可能でしょうし。
>
> 特に保障できるかは定かではありませんが、
> 簡略化するとは、たとえばどのような方法がありますでしょうか。

処理スピードがファイルを置くスピードよりも十分に速い事が保障できるのであれば、
処理がまにあわなくてファイルがどんどん溜まると言うケースを想定する必要が無いので
シングルスレッドで一定間隔で処理と言う方法でも何とかなるかなと言う話です。
処理スピードが間に合わないとなると何か対策を考えないと最悪の場合(ディスクフル)を想定する必要が出てきます。


>>シングルスレッドでSleepを使ってタイミングを取るようにすれば、
>>別に二つ同時に動く心配も要りませんからね。
> シングルスレッドでSleepを使うということは、
> 例えばポーリング間隔が5分と設定された場合、XMLファイルの処理が終わってから5分後に動作するような仕組みということでしょうか。
> (処理に2分かかったとすると、実際には次の処理は7分後となる?)
> できれば、5分と設定したら、5分ごとに処理が行われるようにしたいので、
> それであればSleepを使う方法は、今回は避けようかと思っています。

そこは考え方一つだと思いますよ。
ミリ秒オーダーの正確性を求めないなら処理時間を計っておいてインターバル時間から
差し引けば良いだけの話なのでそんなに難しい話では無いと思います。
もし、処理時間がインターバル時間を上回った時はどうするのが妥当かは考える必要が
あるでしょうけれど。
選択肢は色々あるでしょう。すぐに次の処理を始めるのもよし、
上回った時は最低これだけ待つと言うルールを決めてその時間だけインターバルを取るのもよし。
処理中の時は処理しないと言う判断なら、処理時間とインターバルタイムの差分を
インターバルタイムから差し引いてその時間だけSleepでも良いかと思いますし。

返信 編集キー/


管理者用

- Child Tree -