Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
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);
        }
Example #4
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");
 }
Example #5
0
 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();
 }
Example #6
0
 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));
     }
 }
Example #7
0
        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);
        }
Example #8
0
        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);
        }
Example #9
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);
        }
Example #10
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();
 }
Example #11
0
 public MailService(DataAccessManager dam)
 {
     this.dam = dam;
 }
Example #12
0
 public TestService(DataAccessManager dam)
 {
     this.dam = dam;
 }