Web Api和静态类

时间:2016-12-21 18:55:28

标签: asp.net iis asp.net-web-api

关于Web Api,是否在每次请求时都会将静态类加载到内存中?如果没有,应该使用什么来为每个请求使用相同的静态类并将其加载到内存中一次?我正在考虑加载一个包含字典的类。

2 个答案:

答案 0 :(得分:1)

静态类加载一次,静态成员在所有实例之间共享 - 如果您希望共享字典,则将其声明为类的静态成员(类本身不需要是静态的)。

有一点需要注意:如果您的应用程序在IIS下运行并且您将其配置为允许多个流程实例,那么这些实例将不会共享静态类实例,因为它们位于不同的进程中。这不是默认设置 - 如果您使用默认的IIS设置,那么只有一个进程会为请求提供服务而您会没事 - 否则您将需要采用不同的方法,例如辅助共享内存缓存或服务或数据库然后成为字典的共享存储。

答案 1 :(得分:0)

静态类型仅在每个应用程序域初始化一次,并且仅在引用时初始化。 Web API 4.x和以前的(非核心版本)托管在IIS中,该站点在每个站点的自己的应用程序域1域中托管该站点。

如果你想要一个共享的只读字典,那么你可以使用一个静态类型,它将被加载一次,所有你加载的实例都可以引用同一个字典,而不管它们是什么请求。我不是在提倡这个想法,因为这会进入意见领域,我只是说这是可能的。