2016-12-21 67 views
0

關於Web Api,是否有靜態類在每次請求時加載到內存中?如果沒有,應該用什麼來爲每個請求使用相同的靜態類並將其加載到內存中一次?我正在考慮加載包含字典的類。Web Api和靜態類

回答

1

一個靜態類被加載一次,靜態成員在所有實例之間共享 - 如果你想共享一個字典,然後聲明它是一個類的靜態成員(類本身不需要是靜態的)。

需要注意的一件事是:如果您的應用程序在IIS下運行並且您將其配置爲允許多個流程實例,那麼這些實例不會共享靜態類實例,因爲它們處於不同的進程中。這不是默認設置 - 如果您使用默認的IIS設置,那麼只有一個進程將爲請求提供服務,您將會很好 - 否則您將需要採用不同的方法,例如二級共享內存緩存或服務或數據庫然後成爲字典的共享存儲。

0

靜態類型僅在每個應用程序域中初始化且僅在引用時才初始化。 Web API 4.x和以前的(不是核心版本)託管在IIS中,該站點在每個站點的自己的應用程序域1域中承載該站點。

如果你想要一個共享的只讀字典,那麼你可以使用一個靜態類型,它將被加載一次,並且所有加載的實例都可以引用同一個字典,而不管他們在什麼請求上。我不主張這個想法,因爲這將會進入意見領域,我只是說這是可能的。