static void Bench(object data, ITranscoder transcoder, int repeat) { // warmup and copy var item = transcoder.Serialize(data); var ___ = transcoder.Deserialize(item); var comparer = System.Collections.StructuralComparisons.StructuralEqualityComparer; if (!comparer.Equals(data, ___)) { throw new Exception("failed"); } var items = Enumerable.Range(0, repeat).Select(_ => { return(new CacheItem(item.Flags, new ArraySegment <byte>(item.Data.Array.ToArray(), item.Data.Offset, item.Data.Count))); }).ToArray(); GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); var sw = Stopwatch.StartNew(); for (int i = 0; i < repeat; i++) { var _ = transcoder.Serialize(data); } sw.Stop(); Console.WriteLine("S " + transcoder.GetType().Name + ":" + (int)sw.Elapsed.TotalMilliseconds); sw.Restart(); foreach (var x in items) { var _ = transcoder.Deserialize(x); } sw.Stop(); Console.WriteLine("D " + transcoder.GetType().Name + ":" + (int)sw.Elapsed.TotalMilliseconds); Console.WriteLine("Size:" + item.Data.Count); }
CacheItem ITranscoder.Serialize(object o) { if (o == null) { return(inner.Serialize(o)); } Type type = o.GetType(); if (Serializer.NonGeneric.CanSerialize(type)) { using (var ms = new MemoryStream()) { WriteType(ms, type); Serializer.NonGeneric.Serialize(ms, o); return(new CacheItem(ProtoIdentifier, new ArraySegment <byte>(ms.GetBuffer(), 0, (int)ms.Length))); } } else { return(inner.Serialize(o)); } }
CacheItem ITranscoder.Serialize(object o) { if (o == null) { return(inner.Serialize(o)); } Type type = o.GetType(); if (model.CanSerializeContractType(type)) { using (var ms = new MemoryStream()) { WriteType(ms, type); Interlocked.Increment(ref serializedCount); model.Serialize(ms, o); return(new CacheItem(ProtoIdentifier, new ArraySegment <byte>(ms.GetBuffer(), 0, (int)ms.Length))); } } else { return(inner.Serialize(o)); } }
protected async Task <IOperationResult> PerformStoreAsync(StoreMode mode, string key, object value, Expiration expiration, ulong cas) { try { using (var ci = transcoder.Serialize(value)) { var op = opFactory.Store(mode, keyTransformer.Transform(key), ci, expiration.Value, cas); await cluster.Execute(op).ConfigureAwait(false); return(op.Result); } } catch (IOException e) { return(new BinaryOperationResult().FailWith(e)); } }
static void Bench(object data, ITranscoder transcoder, int repeat) { // warmup and copy var item = transcoder.Serialize(data); var ___ = transcoder.Deserialize(item); var comparer = System.Collections.StructuralComparisons.StructuralEqualityComparer; if (!comparer.Equals(data, ___)) throw new Exception("failed"); var items = Enumerable.Range(0, repeat).Select(_ => { return new CacheItem(item.Flags, new ArraySegment<byte>(item.Data.Array.ToArray(), item.Data.Offset, item.Data.Count)); }).ToArray(); GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); var sw = Stopwatch.StartNew(); for (int i = 0; i < repeat; i++) { var _ = transcoder.Serialize(data); } sw.Stop(); Console.WriteLine("S " + transcoder.GetType().Name + ":" + (int)sw.Elapsed.TotalMilliseconds); sw.Restart(); foreach (var x in items) { var _ = transcoder.Deserialize(x); } sw.Stop(); Console.WriteLine("D " + transcoder.GetType().Name + ":" + (int)sw.Elapsed.TotalMilliseconds); Console.WriteLine("Size:" + item.Data.Count); }
CacheItem ITranscoder.Serialize(object o) { if (o == null) { return(inner.Serialize(o)); } Type type = o.GetType(); //-- (JSK:2011.09.25 - It seems this check stops us from successfully serializing a List<T> where T has a proto contract applied...) //if (ProtoBuf.Serializer.NonGeneric.CanSerialize(type)) //{ using (var ms = new MemoryStream()) { WriteType(ms, type); ProtoBuf.Serializer.NonGeneric.Serialize(ms, o); return(new CacheItem(ProtoIdentifier, new ArraySegment <byte>(ms.GetBuffer(), 0, (int)ms.Length))); } //} //else //{ // return inner.Serialize(o); //} }