有幾千個運行Timer對象(通過調用Reactive RX的Observable.Interval擴展方法在幕後產生),是否有任何性能考慮?這將用於服務器應用程序。可能同時運行的定時器的數量將是數千到數萬。運行Timer對象的性能損失1000?
回答
論壇的迴應儘管如此,答案大概是非常平常的!
我建議你做一個大壺咖啡和讀到這裏巴特迪斯的博客文章:http://blogs.msdn.com/b/rxteam/archive/2012/06/20/reactive-extensions-v2-0-release-candidate-available-now.aspx
總之,你實際上並沒有創建Timer對象,當您使用Observable.Interval,實際上發生了什麼是高效 - 但是,確切的行爲是相當涉及和非常值得理解。
編輯:我已經做了一些關於此接下來在Rx論壇反訴的詳細分析。請參閱此處進行更全面的討論:http://social.msdn.microsoft.com/Forums/en-US/rx/thread/13227561-deaa-4984-a52e-601b8a9f8e14
短版本 - 當10秒鐘時間到達時間爲<時,您將獲得新的計時器,否則將使用單個計時器。
將您的評論標記爲答案,因爲它提供了更深入的鏈接!謝謝詹姆斯 – Arash 2013-05-21 21:32:14
請不要。最好添加到帶有過期時間戳的列表並使用f.e.一個線程來處理列表。
您會注意到的最明顯的情況是,可以同時處理的計時器事件的數量受CPU內核數量的限制。如果同時觸發太多的事件,他們將排隊等待並可能處理相當長的時間。另外,如果同時啓動了太多的線程,上下文切換會導致很多開銷,所以處理程序運行速度會很慢,無論是從開銷還是很多線程需要劃分的事實增加CPU時間。
請考慮您是否可以運行一個定時器,並讓它處理一系列邏輯定時器。
我問了關於Reactive論壇的問題 - 聽起來像是100%可以這樣做。 This is the answer
在這裏引用一下,得到的答覆是:
從內存中有一個單獨的線程,它處理的計時和有一個跟蹤所有預定觀測的一個優先級堆。它的比例非常好。因此,即使有成千上萬的查詢,您也只有一個實際的計時器和一個實際的線程來管理它們。
請參閱我的答案中引用的博文,瞭解更多信息。 Rx版本之間的行爲發生了很大變化。 – 2013-05-13 09:59:22
- 1. 未對齊數據的性能損失
- 2. 性能損失重複創建LINQ到SQL的DataContext對象
- 3. 運行多個服務主機的性能損失?
- 4. Objective-C運行時性能損失的細節
- 5. OS進程執行性能損失
- 6. .NET秒錶 - 性能損失
- 7. @ServiceHost Debug =「true」 - 性能損失?
- 8. 損失性能的WebPart toolpart MOSS 2007
- 9. .NET跨大會的性能損失
- 10. T-SQL 1 = 1的性能損失
- 11. 未定義參數的性能損失
- 12. Java中意外的性能損失
- 13. 性能損失嵌套的MySQL查詢
- 14. Django的:queryset.latest( 'ATTR')ATTR性能損失
- 15. 使用Matlab parfeval的性能損失?
- 16. 使用NIB文件的性能損失?
- 17. 未使用視圖的性能損失?
- 18. 運算符超載的性能損失是多少STL
- 19. Apprpriate Timer對象在WPF中運行音頻
- 20. 這個指針和性能損失
- 21. 庫適配器性能損失
- 22. 是否有任何性能損失
- 23. 將對象聲明放入循環中會有性能損失嗎?
- 24. 如何停止運行Timer?
- 25. 哪個Timer對象應該用於.Net中的長時間運行的進程?
- 26. 分數的可能損失
- 27. 爲什麼有3D旋轉的多個對象導致戲劇性的性能損失
- 28. 作出具體對象類型「對象」失去性能
- 29. 與動態性能並行的對象
- 30. Timer對象的Actionlistener不顯示
即使沒有1000個定時器做任何事情,只是坐在那裏按定期間隔打勾,在我看來,效率相當低。我不知道你的設計是什麼,但我很肯定有一個更好的方法來實現它,而不使用10,000個定時器。 – PoweredByOrange 2013-05-08 23:50:28
我想創建一個通用的自動保存對象,並且每個對象都會間隔保存。更清潔的設計,但如果有一個性能的影響...... – Arash 2013-05-09 00:18:20
考慮編程它,就好像你有1000個定時器,但實現一個自定義的調度程序,實際使用一個,並處理邏輯計時器的答案建議。只是一個想法。 – 2013-05-09 00:39:03