繁体   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