2012-12-17 32 views
0

我的應用程序花費太多的時間Wait方法與SecuritySafeCriticalAttribute慢速性能取勝的服務器在2008年

環境:

  • .NET 4.0
  • 應用平臺86
  • 控制檯應用程序
  • 取勝server 2008(x64)
通過dottrace

我檢查性能受到SecuritySafeCriticalAttribute

上標明的Win7(64位)請注意,所有工作正常。我什麼也沒找到,歡迎任何建議。

任務處理

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); 
     } 
    } 
} 

回答

0

解決

貌似dottrace顯示天氣。我檢查了性能ANTS性能分析器並解決了問題。問題出在SQL請求通過NHibernate

0

我不認爲安全屬性會影響速度。長時間等待此處需要很多時間,可能是因爲您可以同時訪問多個線程的保護對象(某些集合)並長時間鎖定對象(例如在您的代碼處理集合中的每個項目時)。這不是一個正確的方式來使用收集,絕對是你的代碼瓶頸。

+0

我使用'BlockingCollection',所以沒有'鎖'。請注意:這個問題在win7(x64) – GSerjo

+0

上沒有出現Comments for Take()方法建議您可能需要在Add()之後添加對CompleteAdding()的調用:http://msdn.microsoft.com/en-us /library/dd287085%28v=vs.100%29.aspx –

相關問題