2010-08-11 12 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工作得很好。这在我的工作流程中有点阻碍,但是一旦我意识到它发生的原因,我就克服了它。

相关问题