public static void TestForNumUser(DataAccessManager dam, int NumRequestPerUser, int NumUser, String Title, Action <int, int, TestService> Test) { ThreadLocal <TestService> t = new ThreadLocal <TestService>(() => new TestService(dam)); var Time = Environment.TickCount; Parallel.For ( 0, NumUser, i => { for (int k = 0; k < NumRequestPerUser; k += 1) { Test(NumUser, i, t.Value); } } ); var TimeDiff = Environment.TickCount - Time; if (Title == "") { return; } Console.WriteLine("{0}: {1} Users, {2} Request/User, {3} ms", Title, NumUser, NumRequestPerUser, TimeDiff); }
public static int DoTest(DataAccessManager dam) { var t = CreateTestService(dam); TestForNumUser(dam, 64, "TestSaveData", TestSaveData); TestForNumUser(dam, 64, "TestLoadData", TestLoadData); TestForNumUser(dam, 64, "TestSaveAndLoadData", TestSaveAndLoadData); t.SaveLockData(0); TestForNumUser(dam, 64, "TestAddLockData", TestAddLockData); Trace.Assert(t.LoadLockData() == 64); SumValue = 0; t.SaveLockData(0); TestForNumUser(dam, 64, "TestAddDeleteLockData", TestAddDeleteLockData); Trace.Assert(SumValue + t.LoadLockData() == 64); Thread.Sleep(5000); for (int k = 0; k < 8; k += 1) { TestForNumUser(dam, 1 << (2 * k), "TestSaveData", TestSaveData); } Thread.Sleep(5000); for (int k = 0; k < 8; k += 1) { TestForNumUser(dam, 1 << (2 * k), "TestLoadData", TestLoadData); } Thread.Sleep(5000); for (int k = 0; k < 8; k += 1) { TestForNumUser(dam, 1 << (2 * k), "TestSaveAndLoadData", TestSaveAndLoadData); } Thread.Sleep(5000); for (int k = 0; k < 7; k += 1) { var NumUser = 1 << (2 * k); t.SaveLockData(0); TestForNumUser(dam, NumUser, "TestAddLockData", TestAddLockData); Trace.Assert(t.LoadLockData() == NumUser); } Thread.Sleep(5000); for (int k = 0; k < 7; k += 1) { SumValue = 0; var NumUser = 1 << (2 * k); t.SaveLockData(0); TestForNumUser(dam, NumUser, "TestAddDeleteLockData", TestAddDeleteLockData); Trace.Assert(SumValue + t.LoadLockData() == NumUser); } return(0); }
public static int MainInner() { DisplayTitle(); var CmdLine = CommandLine.GetCmdLine(); var UseLoadTest = false; var UsePerformanceTest = false; foreach (var opt in CmdLine.Options) { if ((opt.Name.ToLower() == "?") || (opt.Name.ToLower() == "help")) { DisplayInfo(); return(0); } else if (opt.Name.ToLower() == "load") { UseLoadTest = true; } else if (opt.Name.ToLower() == "perf") { UsePerformanceTest = true; } } var argv = CmdLine.Arguments; if (argv.Length != 1) { DisplayInfo(); return(-1); } var ConnectionString = argv[0]; using (var cl = new CascadeLock()) { var dam = new DataAccessManager(ConnectionString, cl); if (UseLoadTest) { LoadTest.DoTest(dam); } else if (UsePerformanceTest) { PerformanceTest.DoTest(dam); } else { DisplayInfo(); return(-1); } } return(0); }
public static void DisplayInfo() { Console.WriteLine(@"用法:"); Console.WriteLine(Assembly.GetEntryAssembly().GetName().Name + @" <ConnectionString> /load|/perf"); Console.WriteLine(@"ConnectionString 数据库连接字符串"); Console.WriteLine(@"/load 自动化负载测试"); Console.WriteLine(@"/perf 自动化性能测试"); Console.WriteLine(@"示例:"); Console.WriteLine(Assembly.GetEntryAssembly().GetName().Name + @" """ + DataAccessManager.GetConnectionStringExample() + @""" /load"); }
public static void DisplayInfo() { Console.WriteLine(@"用法:"); Console.WriteLine(Assembly.GetEntryAssembly().GetName().Name + @" <ConnectionString>"); Console.WriteLine(@"ConnectionString 数据库连接字符串"); Console.WriteLine(@"示例:"); Console.WriteLine(Assembly.GetEntryAssembly().GetName().Name + @" """ + DataAccessManager.GetConnectionStringExample() + @""""); Console.WriteLine(@""); DisplayHelp(); }
private static ITestService CreateTestService(DataAccessManager dam) { if (System.Diagnostics.Debugger.IsAttached) { return(new TestService(dam)); } else { return(new RetryWrapper(new TestService(dam), dam.GetIsRetryable(), 16)); } }
public static void TestForNumUser(DataAccessManager dam, int NumUser, String Title, Action <int, int, ITestService> Test) { ThreadLocal <ITestService> t = new ThreadLocal <ITestService>(() => CreateTestService(dam)); var Time = Environment.TickCount; Parallel.For(0, NumUser, i => Test(NumUser, i, t.Value)); var TimeDiff = Environment.TickCount - Time; if (Title == "") { return; } Console.WriteLine("{0}: {1} Users, {2} ms", Title, NumUser, TimeDiff); }
public static int DoTest(DataAccessManager dam) { var t = new TestService(dam); TestForNumUser(dam, 8, 1, "TestSaveData", TestSaveData); TestForNumUser(dam, 8, 1, "TestLoadData", TestLoadData); TestForNumUser(dam, 8, 1, "TestSaveAndLoadData", TestSaveAndLoadData); t.SaveLockData(0); TestForNumUser(dam, 8, 1, "TestAddLockData", TestAddLockData); Trace.Assert(t.LoadLockData() == 8); Thread.Sleep(5000); for (int k = 0; k < 4; k += 1) { TestForNumUser(dam, 1 << k, 4096, "TestSaveData", TestSaveData); } Thread.Sleep(5000); for (int k = 0; k < 4; k += 1) { TestForNumUser(dam, 1 << k, 4096, "TestLoadData", TestLoadData); } Thread.Sleep(5000); for (int k = 0; k < 4; k += 1) { TestForNumUser(dam, 1 << k, 4096, "TestSaveAndLoadData", TestSaveAndLoadData); } Thread.Sleep(5000); for (int k = 0; k < 4; k += 1) { var NumUser = 1 << k; t.SaveLockData(0); TestForNumUser(dam, NumUser, 4096, "TestAddLockData", TestAddLockData); Trace.Assert(t.LoadLockData() == NumUser * 4096); } return(0); }
public static int MainInner() { DisplayTitle(); var CmdLine = CommandLine.GetCmdLine(); DatabaseType dt = DatabaseType.SqlServer; foreach (var opt in CmdLine.Options) { if ((opt.Name.ToLower() == "?") || (opt.Name.ToLower() == "help")) { DisplayInfo(); return(0); } else if (opt.Name.ToLower() == "mssql") { dt = DatabaseType.SqlServer; } else if (opt.Name.ToLower() == "mysql") { dt = DatabaseType.MySQL; } } var argv = CmdLine.Arguments; if (argv.Length != 1) { DisplayInfo(); return(-1); } var ConnectionString = argv[0]; var dam = new DataAccessManager(dt, ConnectionString); s = new MailService(dam); Console.WriteLine("输入help获得命令列表。"); while (true) { Console.Write("#"); var Line = Console.ReadLine(); if (System.Diagnostics.Debugger.IsAttached) { if (!RunLine(Line)) { break; } } else { try { if (!RunLine(Line)) { break; } } catch (Exception ex) { Console.WriteLine(ExceptionInfo.GetExceptionInfo(ex)); return(-1); } } } return(0); }
public static void DisplayInfo() { Console.WriteLine(@"用法:"); Console.WriteLine(Assembly.GetEntryAssembly().GetName().Name + @" /mssql|/mysql <ConnectionString>"); Console.WriteLine(@"ConnectionString 数据库连接字符串"); Console.WriteLine(@"示例:"); Console.WriteLine(Assembly.GetEntryAssembly().GetName().Name + @" /mssql """ + DataAccessManager.GetConnectionStringExample(DatabaseType.SqlServer) + @""""); Console.WriteLine(Assembly.GetEntryAssembly().GetName().Name + @" /mysql """ + DataAccessManager.GetConnectionStringExample(DatabaseType.MySQL) + @""""); Console.WriteLine(@""); DisplayHelp(); }
public MailService(DataAccessManager dam) { this.dam = dam; }
public TestService(DataAccessManager dam) { this.dam = dam; }