Время выполнения увеличивается с алгоритмом GZipStream

Я отправляю список объектов из ящика (DAQ) в другой ящик (HMI), используя.Net Remoting. Все было хорошо, когда мы установили наше приложение на новом сайте, где количество отправляемых объектов резко возросло. Поэтому я пришел к выводу, что лучшим решением будет архивирование объектов перед отправкой. Сначала это казалось хорошим решением, пока через месяц клиент не позвонил мне и не сказал, что приложение показывает данные секунд, даже минут после появления. Сейчас я нахожусь на сайте и после проведенного расследования кажется, что время молнии увеличивается со временем.

Вот мой код и результат теста.

код:

    public static byte[] ZipBytes(object lst, out long size)
    {
        byte[] bytes = null;
        size = 0;

        using (var ms = new MemoryStream())
        {
            var formatter = new BinaryFormatter();
            formatter.Serialize(ms, lst);

            ms.Position = 0;
            size = ms.Length;
            using (var mso = new MemoryStream())
            {
                using (var gs = new GZipStream(mso, CompressionMode.Compress))
                    CopyTo(ms, gs);

                bytes = mso.ToArray();
            }
        }
        return bytes;

    }
    private static void CopyTo(Stream src, Stream dest)
    {
        byte[] bytes = new byte[4096];

        int cnt;

        while ((cnt = src.Read(bytes, 0, bytes.Length)) != 0)
            dest.Write(bytes, 0, cnt);

    }

и вот результаты теста:

Количество объектов, размер (в байтах), общее время (тики)

01,894,14239

01,1419,22226

...

19,3085,6439199

01,1429,6442425

19,3064,6461170

Пока я дошел до этой ссылки и собираюсь использовать bufferManager (я использую.Net 3.5), чтобы увидеть, будут ли результаты лучше, но я не понимаю, что не так с текущим кодом.

0 ответов

Другие вопросы по тегам