0

私はこれらの方法を持っています:

public void GetImage(JObject o)
{
    var imageFile = o["file"].ToString();

    if (!File.Exists(imageFile))
    {
         SendMessage("File does not exist");
         return;
    }

    using (var image = Image.FromFile(imageFile))
    {
         var serialized = GetImageAsString(image);

         var ob = new JObject
              {
                  { COMMAND, (int) Command.GetImage },
                  { "content", serialized }
              };

          Send(ob);
          ob = null;
          serialized = null;
    }
}

private static string GetImageAsString(Image image)
{
     using (var stream = new MemoryStream())
     {
          image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
          return Convert.ToBase64String(stream.ToArray());
     }
}

private static void Send(JObject o)
{
     var package = EncodeContent(o);
     _stream.Write(package, 0, package.Length);
     _stream.Flush();

     Cursor.Current = Cursors.WaitCursor;
}

private static byte[] EncodeContent(JObject o)
{
     return Encoding.UTF8.GetBytes(string.Concat(GetMessageSize(o), o, (char) 3));
}

GetImage612KB のファイルで を実行した後JPEG、アプリケーションのメモリ消費量が 10MB 増加し、数分経ってもその 10MB が破棄されません。

  • GetImageによって生成されたオブジェクトが によって適格であることをどのように確認できますGCか?
  • GetImageメソッドの実行後、生成されたオブジェクトが長時間割り当てられないようにするにはどうすればよい ですか?
4

1 に答える 1