Время выполнения увеличивается с алгоритмом 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), чтобы увидеть, будут ли результаты лучше, но я не понимаю, что не так с текущим кодом.