コード例 #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
    object ITranscoder.Deserialize(CacheItem item)
    {
        switch (item.Flags)
        {
        case ProtoIdentifier:
            var    segment = item.Data;
            byte[] raw = segment.Array;
            int    count = segment.Count, offset = segment.Offset;
            Type   type = ReadType(raw, ref offset, ref count);
            using (var ms = new MemoryStream(raw, offset, count))
            {
                return(ProtoBuf.Serializer.NonGeneric.Deserialize(type, ms));
            }

        default:
            return(inner.Deserialize(item));
        }
    }
コード例 #3
0
        object ITranscoder.Deserialize(CacheItem item)
        {
            switch (item.Flags)
            {
            case ProtoIdentifier:
                var    segment = item.Data;
                byte[] raw = segment.Array;
                int    count = segment.Count, offset = segment.Offset;
                Type   type = ReadType(raw, ref offset, ref count);
                using (var ms = new MemoryStream(raw, offset, count))
                {
                    Interlocked.Increment(ref deserializedCount);
                    return(model.Deserialize(ms, null, type));
                }

            default:
                return(inner.Deserialize(item));
            }
        }
コード例 #4
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);
        }