我正在使用SignalR實時數據自動收報器,每秒發送給客戶端的單個對象中包含多達10k行。 IIS工作者處理器的內存不斷增加,直到滴答終於凍結。由於大量實時數據導致SignalR內存遺漏
1
A
回答
2
首先,你已經可以讀取SignalR是建立在你不會發送大消息的前提下的。但是,用真實的話來說,這是一個完全有效的方案。
那麼,什麼是處理內存問題。 SignalR具有一個默認大小爲1000個元素的循環緩衝區,它將每個打開的連接的每條消息存儲到該緩衝區中。所以基本上,如果你有100個打開的連接,並且你發送了1000條消息,那麼你的內存中將存儲總共100 * 1000條消息。
您應該考慮的另一件事是.Net框架的large objects heap和garbage collection。每個大小超過85kB的對象都會轉到大對象堆中,接下來我要指出垃圾收集器將大對象堆中的對象視爲第二個對象generation。考慮到這一點,您可能會意識到,一旦您的對象從SignalR的循環緩衝區中取消引用,由於它們的大小,它們將不會立即被垃圾收集。
@davidfowl說,你真的可以使你的數據更小,但有時你不能做到這一點,而無需在客戶端和服務器上引入一些非常複雜的機制。
Fortunatelly,有降低SignalR的循環緩衝區的默認大小的方式,你可以通過設置做到這一點:
GlobalHost.Configuration.DefaultMessageBufferSize = 32
相關問題
- 1. 由於海量數據處理導致的Java內存泄漏
- 2. 由於CTFontRef導致的內存泄漏
- 3. 由於映射函數導致的內存泄漏泄漏
- 4. 在短時間內可能導致大量內存泄漏
- 5. 是否會由於內存泄漏而導致內存不足?
- 6. 由於CUcontext緩存,Matlab是否會導致Cuda泄漏內存?
- 7. 確實android.media.SoundPool導致內存泄漏?
- 8. 匿名實現導致內存泄漏
- 9. 由於scoped_lock的使用錯誤導致內存泄漏?
- 10. 由於HttpRequest導致內存泄漏直至崩潰
- 11. Spring批處理中由於HibernateSessionImpl導致內存泄漏
- 12. Appcelerator Studio - 由於內存泄漏導致應用程序崩潰
- 13. 由於事件處理程序而導致內存泄漏
- 14. iOS:由於內存泄漏導致的隨機方法調用?
- 15. 由於編組託管代理而導致內存泄漏?
- 16. SignalR重新連接導致內存泄漏
- 17. SiftDescriptorExtractor導致內存泄漏
- 18. vtkWindowToImageFilter導致內存泄漏?
- 19. SKEmitterNode導致內存泄漏
- 20. SmtpClient.Send導致內存泄漏
- 21. pushViewController導致內存泄漏
- 22. CALayer導致內存泄漏?
- 23. SoundPlayer導致內存泄漏?
- 24. glTexImage2D導致內存泄漏
- 25. setTimeout導致內存泄漏
- 26. Dispatcher.beginInvoke導致內存泄漏
- 27. AVAudioPlayer導致內存泄漏
- 28. strdup()導致內存泄漏?
- 29. IntPtr導致內存泄漏?
- 30. NSRunAlertPanel導致內存泄漏
嘗試使數據更小。 – davidfowl
10k行/秒的實時?我無法想象需要這種服務。你不能減少正在發送的數據量嗎? – enzi
@dfowler:什麼是我可以每秒發送的最大郵件大小。而不會導致IIS工作進程的增加。 – zooney