2010-08-11 28 views
0

我有2個組件。 Assembly1被Assembly1引用。 爲什麼Assembly2被鎖定?爲什麼被引用的程序集被鎖定?

我認爲整個程序集是由JIT編譯器加載到RAM中的,不是嗎?

當引用的程序集被調用時,機械工作是如何工作的?

+1

因爲可能會有一些進程鎖定它們。這是一個什麼樣的問題?你真的希望得到一些有用的答案嗎? – 2010-08-11 16:30:56

+2

@Darin Dimitrov;如果他們問這個問題,也許他們希望得到一個有用的答案?也許告訴他們*爲什麼這是一個糟糕的問題。 :-) – 2010-08-11 16:33:40

+0

有關於您的問題的更多信息,女巫大會被鎖定時,爲什麼它是一個問題? – Ivo 2010-08-11 16:34:32

回答

3

(是的,這個問題本來可以更好,還是......)

引用組件加載到進程,並因此鎖定。你可以通過影子複製來解決這個問題,或者在你嘗試修改它們之前,確保你關閉了每個使用你的程序集的進程。

+0

我以爲整個程序集都在RAM中,不是嗎? – Rookian 2010-08-11 17:04:27

+0

@Rookian這是一個很好的問題。我想知道整個程序集是否被加載到內存中,或者只是需要被其他應用程序引用的部分,即標記爲「public」的部分。 – 2010-08-11 17:10:34

1

當VB6應用程序中編寫.NET組件時,遇到了一種情況,在VB6編輯器打開時,我無法部署重新編譯的.NET程序集。這讓我感到非常沮喪,因爲我希望能夠快速做出改變,然後在VB6編輯器中顯示更改。我收到一個錯誤消息,說明程序集被另一個進程或線程鎖定。

我後來意識到這很有道理。如果引用應用程序(在我的案例中是VB6 IDE)相信該庫在每次使用時都是相同的,那麼如果應用程序在內存中時dll發生更改,則會遇到嚴重問題。

在我的情況下,關閉VB6 IDE,更新DLL,並重新打開VB6 IDE工作得很好。這在我的工作流程中有點阻礙,但是一旦我意識到它發生的原因,我就克服了它。

相關問題