Я загружаю изображения в формате jpeg так быстро, как только могу, на веб-службу (это требование, которое мне было дано).
Я использую асинхронный вызов веб-службы и вызываю его по таймеру.
Я пытаюсь максимально оптимизировать и стараюсь использовать для тестирования старый ноутбук. На нормальном/нормальном компе все ОК. На ноутбуке я получаю большое использование оперативной памяти.
Я знаю, что при использовании этого старого ноутбука я получу более высокое использование оперативной памяти, но я хочу знать компьютер с самыми низкими характеристиками, на котором будет работать приложение.
Как вы можете видеть в приведенном ниже коде, я преобразовываю jpeg-изображение в массив байтов, а затем загружаю массив байтов.
Если я смогу уменьшить/сжать/заархивировать массив до свидания, я надеюсь, что это будет один из способов улучшить использование памяти.
Я знаю, что jpeg уже сжат, но если я сравню текущий массив байтов с предыдущим массивом байтов, то, загрузив разницу между этими массивами байтов, я, возможно, смогу сжать его еще больше на том основании, что некоторые значения байтов будут равны нулю.
Если бы я использовал кодировщик видео (который помог бы), я бы не работал в реальном времени так, как мне хотелось бы.
Есть ли оптимальный способ сравнения 2-байтовых массивов и вывода в 3-байтовый массив? Я огляделся, но не смог найти ответ, который мне понравился.
Это мой код на клиенте:
bool _uploaded = true;
private void tmrLiveFeed_Tick(object sender, EventArgs e)
{
try
{
if (_uploaded)
{
_uploaded = false;
_live.StreamerAsync(Shared.Alias, imageToByteArray((Bitmap)_frame.Clone()), Guid.NewGuid().ToString()); //web service being called here
}
}
catch (Exception _ex)
{
//do some thing but probably time out error here
}
}
//web service has finished the client invoke
void _live_StreamerCompleted(object sender, AsyncCompletedEventArgs e)
{
_uploaded = true; //we are now saying we start to upload the next byte array
}
private wsLive.Live _live = new wsLive.Live(); //web service
private byte[] imageToByteArray(Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg); //convert image to best image compression
imageIn.Dispose();
return ms.ToArray();
}
Спасибо...