簡體   English   中英

了解asp.net中的線程以及如何分配服務器內存

[英]Understanding threading in asp.net and how server memory is allocated

例如,如果向服務器發出3個請求,是否意味着將Web應用程序的3個實例放入內存?

如果您使用鎖定的單例或緩存了一個類,以便每次它檢查該對象是否存在並創建該對象(如果不存在)時該怎么辦,是否意味着該對象針對每個請求進行了緩存? 還是將其緩存一次並為每個請求重用?

如果我鎖定了一個單例,這是否意味着使用該單例的對象被創建一次,並且每個請求都使用相同的對象? 還是意味着該對象是針對每個請求使用單例創建的,而不是由同一線程再次創建的?

如果我使用System.Web.HttpRuntime.Cache["key"]; 緩存一個1 mb的對象並發出10個請求,我是否在服務器上用完了10 mb的內存? 如果我使用單例創建了一個新對象...就線程和內存分配而言會發生什么?

在IIS中,將為每個應用程序創建一個AppDomain,並將與同一AppPool中的其他應用程序共享一個進程。

因此,對同一Web應用程序中的服務器的3個請求將共享同一AppDomain。

這如何影響緩存和單例:

System.Web.Caching.Cache上的文檔中:

此類的一個實例是在每個應用程序域中創建的,只要該應用程序域保持活動狀態,它就一直有效。

當您鎖定對象(如單例)時,鎖定的范圍也為AppDomain。

您的實例-進程和您的3個請求-由線程執行。 因此,單例對象將在所有3個請求之間共享。 您的緩存也會在請求之間共享。 在您的示例中,您將僅分配1 Mb(它將更新10次)。 垃圾收集器將收集未使用的空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM