static void Main(string[] args) { Console.WriteLine($"Singleton"); Enumerable.Range(1, 5).Select( i => Task.Run(() => { Console.WriteLine($"{Singleton.GetInstance().GetHashCode()}"); }) ).ToList(); //Enumerable.Range(1, 100).AsParallel().ForAll(i => { Console.WriteLine(i); }); Console.WriteLine($"Singleton1"); Enumerable.Range(1, 5).Select(i => Task.Run(() => { Console.WriteLine($"{Singleton1.GetInstance().GetHashCode()}"); })).ToList(); Console.WriteLine($"Singleton2"); Enumerable.Range(1, 5).Select(i => Task.Run(() => { Console.WriteLine($"{Singleton2.GetInstance().GetHashCode()}"); })).ToList(); Console.WriteLine($"Singleton3"); var ss = Enumerable.Range(1, 5).Select(i => Task.Run(() => { Console.WriteLine($"{Singleton3.GetInstance().GetHashCode()}"); })).ToList(); Console.ReadLine(); }
public void TestSingleton3() { var instance1 = Singleton3.GetInstance(); Assert.IsNotNull(instance1); var instance2 = Singleton3.GetInstance(); Assert.AreSame(instance1, instance2); }
public void GetInstanceTest() { for (int i = 0; i < 5; i++) { int threadCount = 10000; Task <int>[] tasks = new Task <int> [threadCount]; for (int j = 0; j < threadCount; j++) { tasks[j] = Task.Run <int>(() => { return(Singleton3.GetInstance().GetHashCode()); }); } Task.WaitAll(tasks); var codes = tasks.Select(t => t.Result).Distinct(); Assert.AreEqual(codes.Count(), 1, $"Singleton3非单例 {codes.Count()}"); } }
public static void TestInstanceProfile() { int count = 100000; long es = 0; var watch = Stopwatch.StartNew(); for (int i = 0; i < count; i++) { var va = Singleton1.GetInstance(); } watch.Stop(); es = watch.ElapsedTicks; Console.WriteLine($"1 耗时 {es}"); watch.Restart(); for (int i = 0; i < count; i++) { var va = Singleton2.GetInstance(); } watch.Stop(); es = watch.ElapsedTicks; Console.WriteLine($"2 耗时 {es}"); watch.Restart(); for (int i = 0; i < count; i++) { var va = Singleton3.GetInstance(); } watch.Stop(); es = watch.ElapsedTicks; Console.WriteLine($"3 耗时 {es}"); watch.Restart(); for (int i = 0; i < count; i++) { var va = Singleton4.GetInstance(); } watch.Stop(); es = watch.ElapsedTicks; Console.WriteLine($"4 耗时 {es}"); }