2010-10-11 62 views
5

我在想:如果我創建一個帶有私有構造函數的單例類和一個將返回此類的實例的靜態方法,然後將其放入程序集,如果從兩個不同的應用程序訪問此實例,會發生什麼情況?是否通過不同的應用程序共享單身人士?

做的應用程序將總是共享同一個實例的單例?

如果這兩個應用程序從內存中卸載,實例也將被釋放?

謝謝。

回答

8

兩個不同的應用程序將不是共享對象,沒有。他們當然會共享完全相同的對象代碼,因爲他們正在加載相同的程序集,但他們每個都會在自己的地址空間中擁有自己的單個副本。

實際上 - 即使是相同的應用程序,運行兩次,也不會在它們之間共享實際的Singleton實例。

+1

更具體地講,靜態實例不能跨應用程序域邊界共享,因此你甚至可以在一個正在運行的應用程序實例2個單身。 – codekaizen 2010-10-11 09:00:01

2

我不這麼認爲,沒有做任何事你會有一個單身人士每個應用程序空間。

1

如果您沒有通過將其保存/加載到驅動器或數據庫中的相同物理位置來使其成爲共享單身人士,則不是。

2

Singleton類將按照每個AppDomain的基礎,因此如果您有多個加載您的單例類的appdomain,而不是單個類的多於1個的實例。

跨進程辛格爾頓沒有任何意義,你將有不同的情況下