1

例如,如果向服务器发出 3 个请求,这是否意味着将 3 个 Web 应用程序实例放入内存?

如果您使用锁定的单例或缓存了一个类,那么每次它检查对象是否存在并在它不存在时创建该对象时,这是否意味着每个请求都缓存了该对象?还是缓存一次并为每个请求重用?

如果我锁定了一个单例,这是否意味着使用单例的对象被创建一次并且每个请求都使用相同的对象?或者这是否意味着该对象是为每个请求使用单例创建的,但不是由同一个线程再次创建的?

如果我曾经System.Web.HttpRuntime.Cache["key"]; 缓存一个 1 mb 的对象并发出 10 个请求,我是否在服务器上使用了 10 mb 的内存?如果我使用单例创建了一个新对象......在线程和内存分配方面会发生什么?

4

2 回答 2

1

在 IIS 中,为每个应用程序创建一个 AppDomain,并将与同一 AppPool 中的其他应用程序共享一个进程。

因此,同一个 Web 应用程序中对服务器的 3 个请求将共享同一个 AppDomain。

这如何影响缓存和单例:

来自System.Web.Caching.Cache上的文档:

每个应用程序域创建一个此类的实例,只要应用程序域保持活动状态,它就保持有效。

当您锁定一个对象(如单例)时,锁定的范围也是 AppDomain。

于 2012-12-10T22:45:20.363 回答
0

你的实例 - 进程和你的 3 个请求 - 由线程执行。所以单例对象将在所有 3 个请求之间共享。您的缓存也将在请求之间共享。在您的示例中,您将仅分配 1 Mb(它将更新 10 次)。垃圾收集器将收集未使用的空间。

于 2012-12-10T22:44:50.300 回答