sa.*_*.he 23 .net garbage-collection
FullGC在运行时正常暂停所有线程.有两个AppDomain,每个都运行多个线程.当GC运行时,是否会暂停所有线程,还是只有一个AppDomain?
Han*_*ant 16
很难回答,最好的办法就是测试它:
using System;
using System.Reflection;
public class Program : MarshalByRefObject {
static void Main(string[] args) {
var dummy1 = new object();
var dom = AppDomain.CreateDomain("test");
var obj = (Program)dom.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, typeof(Program).FullName);
obj.Test();
Console.WriteLine("Primary appdomain, collection count = {0}, gen = {1}",
GC.CollectionCount(0), GC.GetGeneration(dummy1));
Console.ReadKey();
}
public void Test() {
var dummy2 = new object();
for (int test = 0; test < 3; ++test) {
GC.Collect();
GC.WaitForPendingFinalizers();
}
Console.WriteLine("In appdomain '{0}', collection count = {1}, gen = {2}",
AppDomain.CurrentDomain.FriendlyName, GC.CollectionCount(0),
GC.GetGeneration(dummy2));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
In appdomain 'test', collection count = 3, gen = 2
Primary appdomain, collection count = 3, gen = 2
Run Code Online (Sandbox Code Playgroud)
有充分证据表明GC会影响默认CLR主机上的所有AppDomain.这让我感到惊讶.
jor*_*123 13
从这个线程:这是.net系统范围内的垃圾收集器还是应用程序范围内的垃圾收集器?,它发生在进程级别.该进程中的所有线程都将暂停,但不会跨多个进程.
一个或多个应用程序域可以存在于进程中,但应用程序域不在进程之间共享.Per:http://blogs.msdn.com/b/tess/archive/2008/08/19/questions-on-application-domains-application-pools-and-unhandled-exceptions.aspx ,,过程中的所有appdomains分享同一个GC." 因此,GC会在触发GC时影响所有应用程序域.
但是,如果过多的进程花费时间来处理GC,可能会导致CPU性能下降,这可能会对GC中未涉及的其他进程的性能产生负面影响.
此链接还解释了GC的基本原理:
http://msdn.microsoft.com/en-us/library/ee787088.aspx
| 归档时间: |
|
| 查看次数: |
3004 次 |
| 最近记录: |