在Windows 10上,System.Drawing.FontFamily.IsStyleAvailable方法似乎即使在调用Dispose方法后仍然会将分配的空间保留在内存中。
我编写了一个简单的控制台应用程序来测试它:
using System;
using System.Drawing;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
static string getMemoryStatusString()
{
using (Process p = Process.GetCurrentProcess())
{
return "(p: " + p.PrivateMemorySize64 + ", v:" + p.VirtualMemorySize64 + ")";
}
}
static void Main(string[] args)
{
string s = getMemoryStatusString();
foreach(FontFamily fontFamily in FontFamily.Families)
{
Console.Write(fontFamily.Name + " " + getMemoryStatusString() + " -> ");
fontFamily.IsStyleAvailable(FontStyle.Regular);
fontFamily.Dispose();
Console.WriteLine(getMemoryStatusString());
}
string e = getMemoryStatusString();
Console.WriteLine(s + " -> " + e);
Console.ReadLine();
}
}
}
有什么想法是为什么会发生这种情况吗?
提前致谢!
fontFamily
,因为你并不拥有这个对象,它仍然是Families
集合的成员。对该集合的任何未来枚举都可能会出错。 - Scott Chamberlain