我有这些方法:
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));
}
执行GetImage
一个 612KB 的JPEG
文件后,我的应用程序的内存消耗增加了 10MB,即使几分钟后这 10MB 也没有被释放。
- 我如何确定由 生成的对象
GetImage
将符合条件GC
? - 如何确保
GetImage
方法执行后不会长时间分配 生成的对象?