博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于数据库存放List
阅读量:6804 次
发布时间:2019-06-26

本文共 2005 字,大约阅读时间需要 6 分钟。

背景:

最近一直在弄公司的游戏服务器,项目由开始到现在已经过了三个月了,基本代码已经全部完成,现在正在做一波测试,测试过程中有一些性能问题,我在此记录一下,分享给大家,如果有不对的地方,也请大家指出并给出理由

数据库使用的是 sqlsever 

ORM框架为EntityFramework 6.0

语言 C#

问题描述:

由于项目需求是在开始活动时随机生成物品奖励,并且在未来的某个时间点发放,这个结构我用的是一个字典来存放,物品ID <=>  物品数量 ,但是数据库没有字典结构

初始解决方案

 

将该Dictionary序列化到一个string ,然后存到数据库,取出来的时候再反序列化,如下图

 

 后来到线上时发现了一些性能问题,通过ANTS Performance Profiler 定位到该函数

 

json库选用的是Newstonsoft.json ,问题应该不大

后来向相关同事请教后发现直接用分隔符来写速度会快很多,代码如下

static string Dic2String(Dictionary<int,int> GoodsDic)

{
StringBuilder build = new StringBuilder();

foreach (var item in GoodsDic)

{
build.Append(item.Key);
build.Append(",");
build.Append(item.Value);
build.Append(";");
}

return build.ToString();

}

static Dictionary<int,int> String2Dic(string str)
{
Dictionary<int, int> result = new Dictionary<int, int>();

string[] strList = str.Split(';');

for (int i = 0; i < strList.Count(); i++)
{
if(!strList[i].IsEmpty())
{
string[] keyValue = strList[i].Split(',');
result.Add(keyValue[0].ToInt(), keyValue[1].ToInt());
}
}

return result;

}

public static void Main(string[] args)

{
TestJson();
Console.ReadKey();
}

#region TestJson &

static void TestJson()

{
Dictionary<int, int> GoodsList = new Dictionary<int, int>()
{
{ 1,2},
{ 2,3},
{ 3,4},
{ 4,5},
{ 5,6},
};

string dst = Dic2String(GoodsList);

var dic = String2Dic(dst);
int Times = 100;
Console.WriteLine("测试次数{0}", Times);

Stopwatch watch = Stopwatch.StartNew();

string jsonStr = null;

for (int i = 0; i < Times; i++)
{
jsonStr = GoodsList.ToJson();
}

for (int i = 0; i < Times; i++)

{
jsonStr.FromJson<Dictionary<int,int>>();
}

watch.Stop();

Console.WriteLine("Json用时:{0}",watch.ElapsedMilliseconds);
watch.Reset();

watch.Start();

string TestStr = null;
for (int i = 0; i < Times; i++)
{
TestStr = Dic2String(GoodsList);
}

for (int i = 0; i < Times; i++)

{
String2Dic(TestStr);
}

watch.Stop();

Console.WriteLine("分隔符.用时:{0}", watch.ElapsedMilliseconds);

}

 

下面是测试结果对比

 

从结果来看,json应该是做了缓存加上Cpu的波动所以导致循环次数100次反而时间更短

从业务需求来看,缓存的意义并不大,所以采用分隔符时间更短

 

转载于:https://www.cnblogs.com/ztisme/p/10032165.html

你可能感兴趣的文章
软件架构--分享软件架构图
查看>>
用电脑自带画图工具加字方法
查看>>
惠普服务器10年中的五大错五大幸
查看>>
linux下openssh完全实施方案(含公钥加密安全访问技术)
查看>>
imagemagick生成缩咯图+水印
查看>>
lpar划分
查看>>
MRv2内存监控强杀Container问题解决
查看>>
内网不能通过外网来访问内网的服务器原因分析(外网可以)
查看>>
我的友情链接
查看>>
haproxy 安装与配置以及遇到的问题
查看>>
SQL Server 事务
查看>>
Python变量、数据类型与运算符
查看>>
我的友情链接
查看>>
利用掌握的路由知识解决现实环境中的问题
查看>>
部署SCDPM 2012R2 2.部署SCDPM 2012R2
查看>>
我的友情链接
查看>>
shell 脚本1
查看>>
20160420作业
查看>>
python coding
查看>>
jquery美化select,自定义下拉框样式
查看>>