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));
}
的GetImage
具有612KB JPEG
文件执行后,我的应用程序的内存占用10MB去了,甚至几经分钟那些10MB不处理。
- 我怎么能肯定的是,通过
GetImage
生成的对象将是 资格由GC
? - 如何确保
GetImage
生成的对象在方法执行后不会被分配很长时间?
如果你发出另一个GetImage,它会上升10MB吗?如果是这样,你可以在下降之前做多少次? –
你有没有处置或重置'_stream'? –
实现IDisposable将确保您的对象可以被GC访问,但.NET有一定的开销,所以我不会为此担心。如果你想精确控制内存的使用情况,.NET并不是最好的选择 – jugg1es