0
我之前已經提出過類似問題,而我用於此的答案在這種不同的場景中無效。使用Web服務進行連續上傳的最佳方式
我有一個winform桌面c#應用程序。
在一個計時器(間隔100ms)內,我將位圖轉換爲一個字節數組。
我具有每scecond
10位圖然後這些字節上傳到服務器的流。
處理此問題的服務器沒有問題。
在客戶端我inovke的[web服務]使用異步mehthods。
我檢查的[網絡服務]不能再次調用,直到previouse調用完成的條件。
幀/圖像被「跳過」,如果服務器不及時respnd。
這是我的客戶端代碼:
public void Init()
{
_live.StreamerCompleted += new wsLive.StreamerCompletedEventHandler(_live_StreamerCompleted);
}
private void _live_StreamerCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
_uploaded = true;
}
private static bool _uploaded = true;
private static wsLive.Live _live = new wsLive.Live();
private static byte[] imageToByteArray(Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
imageIn.Dispose();
return ms.ToArray();
}
public static void AddFrame(Image<Bgr, Byte> _newFrame)
{
if (_newFrame != null && _uploaded)
{
byte[] _data = GetDeflated(_newFrame.Copy());
_live.StreamerAsync(Shared.Alias, _data, Guid.NewGuid().ToString());
_newFrame.Dispose();
}
}
public static void AddFrame(Bitmap _newFrame)
{
byte[] _data = imageToByteArray(_newFrame);
_live.StreamerAsync(Shared.Alias, _data, Guid.NewGuid().ToString());
_newFrame.Dispose();
}
//declared at form load
Init();
//inside my timer...
if (Uploaded)
{
LiveStreaming.AddFrame((Bitmap)_currentFrame.Clone());
}
_currentFrame.dispose();
但記憶攀升。我做對了嗎?
感謝
即跳出
您好,感謝看着this.Really欣賞它。你是非常正確的流沒有關閉。我會看看如果這給人的印象:) –
內存使用率達到80%之前現在它穩定在60%,所以definatley改善... –