69 lines
1.9 KiB
C#
69 lines
1.9 KiB
C#
using System;
|
|
using System.Threading;
|
|
using System.Collections;
|
|
|
|
class T {
|
|
/* each thread will create n domains */
|
|
static int threads = 5;
|
|
static int domains = 100;
|
|
static int allocs = 1000;
|
|
static int loops = 1;
|
|
static int errors = 0;
|
|
|
|
public static void worker () {
|
|
Console.WriteLine ("Domain start " + AppDomain.CurrentDomain.FriendlyName + " " + Thread.CurrentThread.GetHashCode ());
|
|
ArrayList list = new ArrayList ();
|
|
for (int i = 0; i < allocs; ++i) {
|
|
list.Add (new object ());
|
|
list.Add (new ArrayList ());
|
|
list.Add (new String ('x', 34));
|
|
int[] a = new int [5];
|
|
list.Add (new WeakReference (a));
|
|
if ((i % 1024) == 0) {
|
|
list.RemoveRange (0, list.Count / 2);
|
|
}
|
|
}
|
|
Console.WriteLine ("Domain end " + AppDomain.CurrentDomain.FriendlyName + " " + Thread.CurrentThread.GetHashCode ());
|
|
}
|
|
|
|
static void thread_start () {
|
|
Console.WriteLine ("Thread start " + Thread.CurrentThread.GetHashCode ());
|
|
for (int i = 0; i < domains; ++i) {
|
|
AppDomain appDomain = AppDomain.CreateDomain("Test-" + i);
|
|
appDomain.DoCallBack (new CrossAppDomainDelegate (worker));
|
|
try {
|
|
AppDomain.Unload (appDomain);
|
|
} catch {
|
|
Interlocked.Increment (ref errors);
|
|
Console.WriteLine ("Error unloading " + "Test-" + i);
|
|
}
|
|
}
|
|
Console.WriteLine ("Thread end " + Thread.CurrentThread.GetHashCode ());
|
|
}
|
|
static int Main (string[] args) {
|
|
if (args.Length > 0)
|
|
threads = int.Parse (args [0]);
|
|
if (args.Length > 1)
|
|
domains = int.Parse (args [1]);
|
|
if (args.Length > 2)
|
|
allocs = int.Parse (args [2]);
|
|
if (args.Length > 3)
|
|
loops = int.Parse (args [3]);
|
|
for (int j = 0; j < loops; ++j) {
|
|
Thread[] ta = new Thread [threads];
|
|
for (int i = 0; i < threads; ++i) {
|
|
Thread t = new Thread (new ThreadStart (thread_start));
|
|
ta [i] = t;
|
|
t.Start ();
|
|
}
|
|
for (int i = 0; i < threads; ++i) {
|
|
ta [i].Join ();
|
|
}
|
|
}
|
|
//thread_start ();
|
|
//Console.ReadLine ();
|
|
return 0;
|
|
}
|
|
}
|
|
|