You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
271 lines
7.6 KiB
271 lines
7.6 KiB
1 month ago
|
using System;
|
||
|
using System.Diagnostics;
|
||
|
|
||
|
|
||
|
namespace MysqlHandling
|
||
|
{
|
||
|
class GamePlayerManager
|
||
|
{
|
||
|
public int m_realmId;
|
||
|
public static int randNumOffset = 0;
|
||
|
|
||
|
// m_index 取值范围 1-10
|
||
|
public int m_index;
|
||
|
|
||
|
// 每个管理器随机生成10个玩家的数据, 后续DB性能测试就从这10个玩家中随机, 否则测试数据内存占用太大
|
||
|
private GamePlayer[] m_playerList = new GamePlayer[10];
|
||
|
|
||
|
public Stopwatch m_watch = new Stopwatch();
|
||
|
|
||
|
public Simulation m_simulation;
|
||
|
|
||
|
public long m_startUid;
|
||
|
|
||
|
public long m_currUid;
|
||
|
|
||
|
// 测试数量
|
||
|
public int m_testCount;
|
||
|
|
||
|
public long m_insertMs;
|
||
|
public long m_getMs;
|
||
|
public long m_updteMs;
|
||
|
public long m_deleteMs;
|
||
|
|
||
|
public GamePlayerManager(int testCount, int realmId, int index)
|
||
|
{
|
||
|
m_realmId = realmId;
|
||
|
m_index = index;
|
||
|
|
||
|
m_testCount = testCount;
|
||
|
// 每个线程独占1亿的uid范围
|
||
|
m_startUid = index * 100000000 + Config.m_DBConfig.uidOffset;
|
||
|
m_currUid = m_startUid;
|
||
|
|
||
|
string dbname = Config.m_DBConfig.dbname;
|
||
|
string dbIp = Config.m_DBConfig.ip;
|
||
|
string user = Config.m_DBConfig.user;
|
||
|
string password = Config.m_DBConfig.password;
|
||
|
int dbtype = Config.m_DBConfig.dbtype;
|
||
|
|
||
|
m_simulation = new Simulation();
|
||
|
m_simulation.DBinit(dbname, dbIp, user, password, dbtype, index);
|
||
|
|
||
|
MakePlayerTemplate();
|
||
|
}
|
||
|
|
||
|
// 生成10个玩家的数据模版
|
||
|
public void MakePlayerTemplate()
|
||
|
{
|
||
|
Random rand = new Random(DateTime.Now.Millisecond);
|
||
|
long startUid = m_index * 1000;
|
||
|
|
||
|
for (int i = 0; i < m_playerList.Length; ++i)
|
||
|
{
|
||
|
int bagCount = rand.Next(200, 512);
|
||
|
int heroCount = rand.Next(200, 512);
|
||
|
int equipmentCount = rand.Next(200, 1024);
|
||
|
|
||
|
m_playerList[i] = new GamePlayer(startUid + i, m_realmId, bagCount, heroCount, equipmentCount);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void TestAll()
|
||
|
{
|
||
|
if (Config.m_DBConfig.testInsert == 1)
|
||
|
{
|
||
|
TestInsert();
|
||
|
}
|
||
|
|
||
|
if (Config.m_DBConfig.testGet == 1)
|
||
|
{
|
||
|
//TestGet();
|
||
|
}
|
||
|
|
||
|
//TestUpdateNoBson();
|
||
|
|
||
|
if (Config.m_DBConfig.testUpdate == 1)
|
||
|
{
|
||
|
TestUpdate();
|
||
|
}
|
||
|
|
||
|
if (Config.m_DBConfig.testDelete == 1)
|
||
|
{
|
||
|
TestDelete();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void TestInsert()
|
||
|
{
|
||
|
//EasyLog.WriteInfo($"{m_index} test insert data");
|
||
|
|
||
|
m_watch.Reset();
|
||
|
m_watch.Start();
|
||
|
int succ = 0;
|
||
|
int count = m_testCount;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
for (int i = 0; i < count;)
|
||
|
{
|
||
|
for (int j = 0; j < 10 && i < count; j++)
|
||
|
{
|
||
|
if (m_simulation.Insert(m_currUid++, m_playerList[j].m_role))
|
||
|
{
|
||
|
succ++;
|
||
|
}
|
||
|
|
||
|
i++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
EasyLog.WriteErr(e.Message);
|
||
|
EasyLog.WriteErr(e.StackTrace);
|
||
|
}
|
||
|
|
||
|
m_watch.Stop();
|
||
|
m_insertMs = m_watch.ElapsedMilliseconds;
|
||
|
EasyLog.WriteInfo($"{m_index} startUid {m_startUid}, currUid {m_currUid} insert count {count}, succ {succ} time {m_watch.ElapsedMilliseconds} ms");
|
||
|
}
|
||
|
|
||
|
public void TestGet()
|
||
|
{
|
||
|
//EasyLog.WriteInfo($"{m_index} test get data");
|
||
|
|
||
|
m_watch.Reset();
|
||
|
m_watch.Start();
|
||
|
int succ = 0;
|
||
|
int count = m_testCount;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
long startUid = m_startUid;
|
||
|
for (int i = 0; i < count;)
|
||
|
{
|
||
|
for (int j = 0; j < 10 && i < count; j++)
|
||
|
{
|
||
|
if (m_simulation.Get(startUid++))
|
||
|
{
|
||
|
succ++;
|
||
|
}
|
||
|
|
||
|
i++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
EasyLog.WriteErr(e.Message);
|
||
|
EasyLog.WriteErr(e.StackTrace);
|
||
|
}
|
||
|
|
||
|
m_watch.Stop();
|
||
|
m_getMs = m_watch.ElapsedMilliseconds;
|
||
|
EasyLog.WriteInfo($"{m_index} get count {count}, succ {succ} time {m_watch.ElapsedMilliseconds} ms");
|
||
|
}
|
||
|
|
||
|
public void TestUpdateNoBson()
|
||
|
{
|
||
|
//EasyLog.WriteInfo($"{m_index} test update data");
|
||
|
|
||
|
m_watch.Reset();
|
||
|
m_watch.Start();
|
||
|
int succ = 0;
|
||
|
int count = m_testCount;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
long startUid = m_startUid;
|
||
|
for (int i = 0; i < count;)
|
||
|
{
|
||
|
for (int j = 9; j >= 0 && i < count; j--)
|
||
|
{
|
||
|
if (m_simulation.UpdateNoBson(startUid++, m_playerList[j].m_role))
|
||
|
{
|
||
|
succ++;
|
||
|
}
|
||
|
|
||
|
i++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
EasyLog.WriteErr(e.Message);
|
||
|
EasyLog.WriteErr(e.StackTrace);
|
||
|
}
|
||
|
|
||
|
m_watch.Stop();
|
||
|
m_updteMs = m_watch.ElapsedMilliseconds;
|
||
|
EasyLog.WriteInfo($"{m_index} updateNoBson count {count}, succ {succ} time {m_watch.ElapsedMilliseconds} ms");
|
||
|
}
|
||
|
|
||
|
|
||
|
public void TestUpdate()
|
||
|
{
|
||
|
//EasyLog.WriteInfo($"{m_index} test update data");
|
||
|
|
||
|
m_watch.Reset();
|
||
|
m_watch.Start();
|
||
|
int succ = 0;
|
||
|
int count = m_testCount;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
long startUid = m_startUid;
|
||
|
for (int i = 0; i < count;)
|
||
|
{
|
||
|
for (int j = 0; j < 10 && i < count; j++)
|
||
|
{
|
||
|
if (m_simulation.UpdateBson(startUid++, m_playerList[j].m_role))
|
||
|
{
|
||
|
succ++;
|
||
|
}
|
||
|
|
||
|
i++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
EasyLog.WriteErr(e.Message);
|
||
|
EasyLog.WriteErr(e.StackTrace);
|
||
|
}
|
||
|
|
||
|
m_watch.Stop();
|
||
|
m_updteMs = m_watch.ElapsedMilliseconds;
|
||
|
EasyLog.WriteInfo($"{m_index} update count {count}, succ {succ} time {m_watch.ElapsedMilliseconds} ms");
|
||
|
}
|
||
|
|
||
|
public void TestDelete()
|
||
|
{
|
||
|
//EasyLog.WriteInfo($"{m_index} test delete data");
|
||
|
|
||
|
m_watch.Reset();
|
||
|
m_watch.Start();
|
||
|
int succ = 0;
|
||
|
int count = m_testCount;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
long startUid = m_startUid;
|
||
|
for (int i = 0; i < count; i++)
|
||
|
{
|
||
|
m_simulation.Delete(startUid++);
|
||
|
succ++;
|
||
|
}
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
EasyLog.WriteErr(e.Message);
|
||
|
EasyLog.WriteErr(e.StackTrace);
|
||
|
}
|
||
|
|
||
|
m_watch.Stop();
|
||
|
m_deleteMs = m_watch.ElapsedMilliseconds;
|
||
|
EasyLog.WriteInfo($"{m_index} delete count {count}, succ {succ} time {m_watch.ElapsedMilliseconds} ms");
|
||
|
}
|
||
|
}
|
||
|
}
|