2013-11-20 61 views
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(); 

但記憶攀升。我做對了嗎?

感謝

即跳出

回答

2

的一個問題是,你是不是在配置的imageToByteArray的的MemoryStream。

試試這個:

private static byte[] imageToByteArray(Image imageIn) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
      imageIn.Dispose(); 
      return ms.ToArray(); 
     } 
    } 
+0

您好,感謝看着this.Really欣賞它。你是非常正確的流沒有關閉。我會看看如果這給人的印象:) –

+0

內存使用率達到80%之前現在它穩定在60%,所以definatley改善... –

相關問題