代码之家  ›  专栏  ›  技术社区  ›  leppie

AppDomain的创建速度有多快?

  •  1
  • leppie  · 技术社区  · 17 年前

    我刚刚发现,如果通过反射生成程序集。埃米特,那个。NET框架将引用保存在防止反射的静态成员中。排放类不得为GC类。

    由于限制,我无法使用DynamicMethod。我还在程序过程中生成了大量程序集(IronScheme的增量编译器)(可能超过1000个)。

    因此,我想在一个单独的域中处理代码生成,稍后卸载(还没有决定如何处理)。

    有人知道这会有多贵吗?

    2 回复  |  直到 17 年前
        1
  •  2
  •   user38601    16 年前

    我会根据你的具体情况进行基准测试。

    如果它被证明是昂贵的,只需预先创建一些,根据需要使用,并在后台重新创建新的,以确保你总是有足够的未使用的等待(有点像线程池,但每次都要重新创建以释放内存)。

        2
  •  1
  •   Joel Coehoorn    17 年前

    据我所知,它只是比生成线程慢一点。


    一直在做一些研究,试图找到一个真正的参考。到目前为止,这是我能想到的最好的:
    http://msdn.microsoft.com/en-us/library/aa159887.aspx

    大约2/3的时间里,创建AppDomain是“昂贵的”,但在某些情况下,你可能会对线程说同样的话——这实际上取决于特定线程在创建时做了什么。

    再次强调:据我所知,AppDomain本质上是进程中的一个线程(或多个线程)——如果你愿意的话,它是一个逻辑分隔符——这样运行时就保证了某些额外的保护措施是有效的,可以防止单独的AppDomain相互干扰。要在现有进程(应用程序)中创建新的AppDomain,框架必须完成与创建新线程相关的所有工作,以及在应用程序的其余部分中设置它的一些额外开销(这也可能涉及将一个或多个程序集加载到内存中)。最后,AppDomain位于线程和进程之间。