0

私のアプリケーションはWaitメソッドに多くの時間を費やしています

環境:

  • .Net 4.0
  • アプリ プラットフォーム x86
  • コンソール アプリ
  • 勝利サーバー 2008 (x64)

dottrace でパフォーマンスを確認しました

WaitによってマークされていますSecuritySafeCriticalAttribute

Win7 (x64) ではすべて正常に動作することに注意してください。私は何も見つかりませんでした。どんな提案も大歓迎です。

タスク処理

private readonly BlockingCollection<TTask> _queue = new BlockingCollection<TTask>();
private Thread _workThread;

public void ProcessTask(TTask task)
{
    _queue.Add(task);
}

private void ProcessTask()
{
    while (_isRun)
    {
        try
        {
            TTask task = _queue.Take();
            if (task.IsNull())
            {
                continue;
            }
            _log.DebugFormat("Sending task: {0}", task);
            DoProcessMessage(task);
        }
        catch (Exception ex)
        {
            _log.Error(ex);
        }
    }
}
4

2 に答える 2

0

解決しました

dottraceは天気を示しているように見えます。ANTS Performance Profilerでパフォーマンスを確認し、問題を修正しました。NHibernateを介したSQLリクエストに問題がありました

于 2012-12-17T16:04:03.640 に答える
0

セキュリティ属性が速度に影響するとは思いません。おそらく、保護されたオブジェクト (コレクション) に複数のスレッドから同時にアクセスし、オブジェクトを長時間 (たとえば、コードがコレクション内の各アイテムを処理している間) ロックしたままにしておくため、ここでの待機に長い時間がかかります。これはコレクションを使用する適切な方法ではなく、間違いなくコードのボトルネックです。

于 2012-12-17T11:19:44.143 に答える