0

ウェブサイトの商品ステータスをチェックするプログラムがあります。

以前にスレッドを学習したことがなかったので、プログラムで system.threading.timer を使用するだけです。

system.threading.timer のリストといくつかの system.threading.timer があります

List<system.threading.timer> _timerList;
System.threading.timer _timerA;
System.threading.timer _timerB;
System.threading.timer _timerC;

_timerA を呼び出して商品のステータスを確認し、_timerList を呼び出して、商品が稼働しているときに 10 アカウントのアカウント リストで商品を購入しました。

500 ミリ秒ごとに _timerA を実行します。

_timerA = new System.Threading.Timer(new TimerCallback(submit_checkgoods), 0, 0, 500);

submit_checkgoods 内 ( _timerList.Add(...) が先に呼び出されます):

if ( goodsIsUp == true)
{
    for (int k = 0; k < infolistbb.Count; k++)
    {
        int copy = k;
        _timerList[copy] = new System.Threading.Timer(new TimerCallback(submit_buygoods), copy, 0, 0);
    }
}

問題は、_timerlist[copy] を呼び出して実行するのが非常に遅いことです。

submit_buygoods の最後まで実行する _timerlist を呼び出した時間と、submit_buygoods を実行した時間をストップウォッチで確認しました。

submit_buygoods の実行は本当に速いですが、呼び出しプロセスは 1 つずつのようです。

_timerList[0] が submit_buygoods の実行を終了したら、_timerList[1] を実行します。

スレッドが多すぎる場合 (実際には約 15 )、これは System.threading.timer の欠陥ですか?

理由は何ですか?何か救済策はありますか?Thread t = new Thread() に切り替えると役に立ちますか?

4

1 に答える 1

3

スレッドの代わりにタスクを使用してください。短いジョブに適しています。

Task.Factory.StartNew(submit_buygoods);

PS 500 ミリ秒ごとにサーバーを叩くべきではないかもしれません。IP が禁止される可能性があります。

于 2013-10-01T14:27:09.023 に答える