7,765
社区成员
发帖
与我相关
我的任务
分享
[fastCSharp.setup.cSharp.memoryDatabase(CacheType = typeof(fastCSharp.memoryDatabase.cache.identityArray<,>), FileName = null, MinRefreshSize = 1, MaxLogCacheSize = 0, ClientPoolType = typeof(clientPool), IsEmbed = false, IsJsonSerialize = false)]
对于代码生成模式,数据库操作代理就是 Model.memoryDatabase.Default,比如 private static memoryDatabase db = memoryDatabase.Default;
对于反射模式,数据库操作代理需要自己创建。嵌入模式与远程模式的数据库代理分别如下 private static fastCSharp.setup.cSharp.memoryDatabase.localTable<identity, int> db = fastCSharp.setup.cSharp.memoryDatabase.table.Open(new setup.cSharp.memoryDatabase.localTable<identity, int>(new fastCSharp.memoryDatabase.cache.identityArray<identity>()));
private static fastCSharp.setup.cSharp.memoryDatabase.remoteTable<identity, int> db = fastCSharp.setup.cSharp.memoryDatabase.table.Open(new setup.cSharp.memoryDatabase.remoteTable<identity, int>(new clientPool(), new fastCSharp.memoryDatabase.cache.identityArray<identity>()));
性能测试,采用的数据定义如下 public abstract class data
{
public bool Bool;
public byte Byte;
public sbyte SByte;
public short Short;
public ushort UShort;
public int Int;
public uint UInt;
public long Long;
public ulong ULong;
public DateTime DateTime;
public float Float;
public double Double;
public decimal Decimal;
public Guid Guid;
public char Char;
public string String;
public bool? BoolNull;
public byte? ByteNull;
public sbyte? SByteNull;
public short? ShortNull;
public ushort? UShortNull;
public int? IntNull;
public uint? UIntNull;
public long? LongNull;
public ulong? ULongNull;
public DateTime? DateTimeNull;
public float? FloatNull;
public double? DoubleNull;
public decimal? DecimalNull;
public Guid? GuidNull;
public char? CharNull;
}
当成员String为null的时候,二进制序列化数据大概120+字节,Unicode编码的JSON序列化数据大概580+字节。本地模式二进制序列化:10W对象,序列化数据 12M+,平均耗时0.62s,CPU 100%(嵌入式的稳定类型选择)
远程缓存二进制序列化:10W对象,序列化数据 12M+,平均耗时 0.8s,CPU 100%(可靠性要求低的稳定类型选择)
远程模式二进制序列化: 1W对象,序列化数据1.2M+,平均耗时 0.8s,CPU 100%(要求可靠的稳定类型选择)
本地模式 JSON 序列化:10W对象,序列化数据 58M+,平均耗时 2s,CPU<100%[我的硬盘跟不上了](嵌入式的非稳定类型选择)
远程缓存 JSON 序列化:10W对象,序列化数据 58M+,平均耗时2.45s,CPU 100%(可靠性要求低的非稳定类型选择)
远程模式 JSON 序列化: 1W对象,序列化数据5.8M+,平均耗时1.05s,CPU 100%(要求可靠的非稳定类型选择)
本地模式二进制序列化:10W对象,序列化数据 12M+,平均耗时3.05s,CPU 100%
远程缓存二进制序列化:10W对象,序列化数据 12M+,平均耗时 3.2s,CPU 100%
远程模式二进制序列化: 1W对象,序列化数据1.2M+,平均耗时 1.2s,CPU 100%
本地模式 JSON 序列化:10W对象,序列化数据 58M+,平均耗时 4.6s,CPU 100%
远程缓存 JSON 序列化:10W对象,序列化数据 58M+,平均耗时 5s,CPU 100%
远程模式 JSON 序列化: 1W对象,序列化数据5.8M+,平均耗时1.35s,CPU 100%
if exist $(ProjectDir)..\ui\bin\Release\fastCSharp.ui.exe $(ProjectDir)..\ui\bin\Release\fastCSharp.ui.exe $(ProjectName) $(ProjectDir) $(TargetPath) $(TargetName)
[memberIndex:int][length:int][data]...[END]
,每当class定义修改以后,会将定义成员信息[memberIndex+Type+Name]也提交到数据库,客户端可以自动识别memberIndex转换到正确的memberIndex。本地模式 1线程:平均耗时 0.6s,CPU 100%
远程模式 1线程:平均耗时 4.75s,CPU 100%
远程模式 2线程:平均耗时 3.11s,CPU 100%
远程模式 5线程:平均耗时 1.95s,CPU 100%
远程模式 10线程:平均耗时 1.62s,CPU 100%
远程模式 20线程:平均耗时 1.45s,CPU 100%
远程模式 25线程:平均耗时 1.44s,CPU 100%
远程模式 40线程:平均耗时 1.42s,CPU 100%
远程模式 50线程:平均耗时 1.43s,CPU 100%
远程模式 80线程:平均耗时 1.67s,CPU 100%
远程模式200线程:平均耗时 2.1s,CPU 100%
远程模式500线程:平均耗时 2.54s,CPU 100%
代码生成模式+成员识别二进制序列化 [10W对象 + 序列化数据35M]测试结果本地模式 1线程:平均耗时 0.96s,CPU 100%
远程模式 1线程:平均耗时 5.4s,CPU 100%
远程模式 2线程:平均耗时 3.8s,CPU 100%
远程模式 5线程:平均耗时 2.66s,CPU 100%
远程模式 10线程:平均耗时 2.35s,CPU 100%
远程模式 20线程:平均耗时 2.07s,CPU 100%
远程模式 25线程:平均耗时 2.22s,CPU 100%
远程模式 40线程:平均耗时 2.23s,CPU 100%
远程模式 50线程:平均耗时 2.48s,CPU 100%
远程模式 80线程:平均耗时 2.69s,CPU 100%
远程模式200线程:平均耗时 3.27s,CPU 100%
远程模式500线程:平均耗时 3.29s,CPU 100%
反射模式+普通二进制序列化 [10W对象 + 序列化数据12M]测试结果本地模式 1线程:平均耗时 3.1s,CPU 100%
远程模式 1线程:平均耗时 8.17s,CPU 100%
远程模式 20线程:平均耗时 4.26s,CPU 100%
远程模式 25线程:平均耗时 4.26s,CPU 100%
远程模式 40线程:平均耗时 4.25s,CPU 100%
反射模式+成员识别二进制序列化 [10W对象 + 序列化数据35M]测试结果本地模式 1线程:平均耗时 3.26s,CPU 100%
远程模式 1线程:平均耗时 8.21s,CPU 100%
远程模式 20线程:平均耗时 4.52s,CPU 100%
远程模式 25线程:平均耗时 4.64s,CPU 100%
远程模式 40线程:平均耗时 4.67s,CPU 100%
可以看到序列化模式的选择,对于性能影响不大。反射模式相差不到10%,代码生成模式+远程模式也在40%以下。
在本地模式中,反射模式模式与代码生成模式性能相差2倍以上;在远程模式中,反射模式模式与代码生成模式性能相差1-2倍左右。