因爲asp.net包含多個線程同時執行。
所以如果2個線程訪問我從asp.net httpcontext緩存中獲得的對象(簡單或複雜)。
如果這兩個遊戲者試圖同時修改/讀取它,這不會導致該對象的狀態問題嗎?
那麼我應該實施什麼樣的預防措施?
例如,我想也許鎖定對象,同時使用它? (不會導致性能問題?)
或者當我從緩存中檢索一些對象時,我應該從中創建一個副本?
或者我可能根本不需要擔心這個問題?
謝謝什麼技術應該用來處理asp.net緩存中的對象,以防止多個asp.net工作線程訪問的問題?
1
A
回答
0
您需要根據問題的背景來確定此問題,所有解決方案均不適用於此。如果你只是在讀數據,那麼你將沒有線程問題。如果你正在頻繁地寫數據,那麼使用緩存就毫無意義。如果它的某種混合和緩存確實有助於提高性能等,那麼你需要使用正常的線程同步技術(例如讀寫器鎖),或者在對象的更改始終創建新對象的情況下使對象不可變。這個選擇會導致自己的線程問題,因爲新對象必須替換緩存中的舊對象。
0
在5年多的ASP.NET開發項目中,我從來沒有遇到過這種擔心的情況。
這就是說......你當然不會有問題閱讀任何項目。如果你有一個你想經常修改的對象,爲什麼它在緩存中開始?如果你不需要經常修改它,那麼鎖定對象不會是一個性能問題。
相關問題
- 1. 防止ASP.NET瀏覽器緩存的問題,以及測試
- 2. asp.net中的緩存問題
- 3. asp.net中的緩存問題
- 4. C#問題,試圖訪問緩存對象的多個用戶
- 5. .htaccess防止ajax請求的直接訪問防止技術
- 6. ASP.NET內存管理技術
- 7. 新的android - 應該使用什麼技術來訪問web服務?
- 8. ASP.NET會話訪問技術是多用戶安全的嗎?
- 9. ASP.NET工作線程可以同時處理多個請求嗎?
- 10. asp.net中的多線程問題
- 11. 緩慢線程處理的緩解技術
- 12. 「Out of Band」爲asp.net應用程序提供處理技術
- 13. 多線程處理問題
- 14. JavaScript對象屬性訪問技術
- 15. 我應該使用哪種ASP.NET緩存技術來緩存視圖查詢的結果?
- 16. 管理asp.net中的緩存對象
- 17. ASP.NET線程問題
- 18. 防止濫用ASP.net處理程序
- 19. 多線程訪問多個對象
- 20. ASP.NET MVC 2緩存問題
- 21. 問題與緩存asp.net
- 22. Request.IsAuthenticated問題緩存在ASP.NET
- 23. ASP.NET/iPad Safari緩存問題?
- 24. 從單獨的線程訪問ASP.NET緩存?
- 25. 緩存的問題使用JavaScript和asp.net
- 26. ASP.Net中的頁面緩存問題
- 27. 從ASP.Net中的普通類訪問應用程序對象
- 28. Django1.3多個gunicorn工作緩存問題
- 29. 使用什麼技術來訪問Jira 3.13.2?
- 30. 我應該如何在Qt中處理這個線程問題?
假設這是一個域數據對象。該對象不會經常修改,但假設它在第二個線程正在讀取時被第一個線程修改,則第一個線程會將該對象保存到數據庫。 – Karim 2010-09-08 22:44:18
鎖定所有代碼甚至只讀取對象的代碼。有一種方法可以鎖定寫入器,但並不像lock那樣簡單。這就是爲什麼鎖定會導致線程在讀取時被阻塞的原因。 – Karim 2010-09-08 22:45:57
@Karim - @Bryan是對的。緩存中的對象應該是隻讀的。但是,如果你絕對必須修改這個對象 - 那麼用singleton模式來實現getters/setter呢? – RPM1984 2010-09-09 00:20:02