コード例 #1
0
        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);
        }
コード例 #2
0
        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));
            }
        }
コード例 #3
0
        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));
            }
        }
コード例 #4
0
        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));
            }
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: neuecc/MemcachedTranscoder
        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);
        }
コード例 #6
0
    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);
        //}
    }