C#インスタンスのバイトサイズ計測

下記URLを参考にしました。

　http://note.chiebukuro.yahoo.co.jp/detail/n23643


■MessagePackとJsonのバイトサイズ比較

```
using System.Collections;
using System.Collections.Generic;
using MsgPack;
using MsgPack.Serialization;
using System;
using System.Net;
using System.IO;
using System.Text;
using System.Collections.ObjectModel;
using System.Threading;
using MiniJSON;

public class MessagePack_Unity501 {

    private string MsgLog;

    public int LoopCnt = 0;

    public SerializationMethod packMethod;
    public int MsgPackFlg;
    public Action BackEnd;
    public Action BackContinue;
    public SerializationMethod useMethod;


    public Thread _threadFirst;

    public AutoResetEvent _threadEvent;

    public string TestString;

    public bool sleepFLG = false;
    public bool GoSendFLG = false;

    public void ThreadStart()
    {
        sleepFLG = true;
        GoSendFLG = false;
        _threadFirst = new Thread(ThreadWorking);
        _threadEvent = new AutoResetEvent(true);
        _threadFirst.Start();
    }


    /// <summary>
    /// スレッド処理
    /// </summary>
    public void ThreadWorking()
    {
        while (true)
        {
            // 現在、MessagePack処理をおこなっているか？
            if(GoSendFLG == true)
            {
                sleepFLG = false;
                GoSendFLG = false;
                // MessagePack処理
                MessagePackSend();
            }
            else
            {
                /// スレッド休止用FLGが立っているか？
                if (sleepFLG == true)
                {
                    TestString = "Sleep On";
                    // スレッドを給仕状態にする
                    _threadEvent.WaitOne();
                }
                else
                {
                    TestString = "Sleep Off";
                }
            }
        }
    }









    public void MessagePackSend()
    {
        MsgLog = MsgLog + ",LoopCnt=" + LoopCnt.ToString();
        DateTime starttime = new DateTime();
        starttime = DateTime.Now;
        MsgLog = MsgLog + ",StartTime=" + starttime.Ticks.ToString();

        Dictionary<string, string> JsonDataDic = new Dictionary<string, string>();

        int serializelength = 0;
        int deserializelength = 0;

        int loopmax = 1000;
        for (int i = 0; i < loopmax; i++)
        {
            JsonDataDic.Add(i.ToString(), i.ToString());
        }

        byte[] ByteArray;
        // BinaryFormatterオブジェクト生成
        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bForma = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        // メモリストリームをオープン
        System.IO.MemoryStream mStr = new System.IO.MemoryStream();

        if (MsgPackFlg > 0)
        {
            var stream = new MemoryStream();
            // --- シリアライズ
            // Set using Map instead of Array to serialize complex object. See Sample03 for details.
            var context = new SerializationContext();
            context.SerializationMethod = packMethod;


            // 1. Create serializer instance.
            var serializer = MessagePackSerializer.Get<Dictionary<string, string>>(context);

            // 2. Serialize object to the specified stream.
            serializer.Pack(stream, JsonDataDic);

            serializelength = (int)stream.Length;

            var deserializer = MessagePackSerializer.Get<Dictionary<string, string>>();
            var unpacked = deserializer.UnpackSingleObject(stream.GetBuffer());

            bForma.Serialize(mStr, unpacked);
        }
        else
        {

            string serialized = Json.Serialize(JsonDataDic);

            byte[] byteArray = Encoding.Unicode.GetBytes(serialized);
            serializelength = byteArray.Length;

            var deserializedDoubleList = Json.Deserialize(serialized) as Dictionary<string, object>;

            // シリアル化し、そのバイナリをメモリストリームへ保存
            bForma.Serialize(mStr, deserializedDoubleList);
        }

        // メモリストリームに格納されているデーターをバイト型配列に設定
        ByteArray = mStr.ToArray();
        // メモリストリームをクローズ
        mStr.Close();
        deserializelength = ByteArray.Length;



        DateTime endtime = new DateTime();
        endtime = DateTime.Now;
        MsgLog = MsgLog + " ,EndTime=" + endtime.Ticks.ToString() + "\n";

        LoopCnt++;
        if (LoopCnt < loopmax)
        {
            BackContinue();
        }
        else
        {
            BackEnd();
        }

        /// 処理が終了したのでスレッド休止用FLGをたてる
        sleepFLG = true;

    }

    /// <summary>
    /// スレッドを休止状態から起こす
    /// </summary>
    public void SleepFlgFalse()
    {
        /* スレッド処理を実行するようにフラグを落とします */
        sleepFLG = false;

        GoSendFLG = true;

        /* AutoResetEventオブジェクトをシグナル状態にして
            スレッドを再開させます */
        _threadEvent.Set();
    }

    public string DisplayLog()
    {
        return MsgLog;
    }


    public void DeleteLog()
    {
        MsgLog = "";
    }
}
```