using System.Diagnostics; using ProtoCSStruct; using Sog; using Sog.IO; namespace Mail { public abstract class MailDBOperator { private long zipLenOld; private long zipLenNew; private long zipCpuTicks; private int zipCount; private long zipTimeMs => swMsFreq > 0 ? zipCpuTicks / swMsFreq : 0; private long unzipLenOld; private long unzipLenNew; private long unzipCpuTicks; private int unzipCount; private long unzipTimeMs => swMsFreq > 0 ? unzipCpuTicks / swMsFreq : 0; private Stopwatch sw; private long swMsFreq; public MailDBOperator() { sw = new Stopwatch(); sw.Start(); // 转换成每毫秒的tick频率 swMsFreq = Stopwatch.Frequency / 1000; } public byte[] ZipData(byte[] unzipData) { if (unzipData == null || unzipData.Length == 0) { return unzipData; } long oldTicks = sw.ElapsedTicks; byte[] zipData = ZipUtils.CompressBytes(unzipData); long costTicks = sw.ElapsedTicks - oldTicks; zipLenOld += unzipData.Length; zipLenNew += zipData.Length; zipCpuTicks += costTicks; zipCount++; TraceLog.Trace("MailDBOperator.ZipData len {0} -> {1} cpuTicks {2}, total Len {3} -> {4} timeMs {5} count {6}" , unzipData.Length, zipData.Length, costTicks, zipLenOld, zipLenNew, zipTimeMs, zipCount); return zipData; } public byte[] UnzipData(byte[] zipData) { if (zipData == null || zipData.Length == 0) { return zipData; } long oldTicks = sw.ElapsedTicks; byte[] unzipData = ZipUtils.DecompressBytes(zipData); long costTicks = sw.ElapsedTicks - oldTicks; unzipLenOld += zipData.Length; unzipLenNew += unzipData.Length; unzipCpuTicks += costTicks; unzipCount++; TraceLog.Trace("MailDBOperator.UnzipData len {0} -> {1} cpuTicks {2}, total Len {3} -> {4} timeMs {5} count {6}" , zipData.Length, unzipData.Length, costTicks, unzipLenOld, unzipLenNew, unzipTimeMs, unzipCount); return unzipData; } //销毁的时候置空 public abstract void Dispose(); public abstract void KeepAlive(); public abstract int QueryMail(long uid, ref DBMailBlob blob); public abstract bool InsertMail(long uid, ref DBMailBlob blob); public abstract bool UpdateMail(long uid, ref DBMailBlob blob); } }