在Windows 10 .NET的FontFamily内存泄漏 [英] .NET FontFamily memory leak on Windows 10

查看:153
本文介绍了在Windows 10 .NET的FontFamily内存泄漏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Windows 10上,即使在调用Dispose方法后,System.Drawing.FontFamily.IsStyleAvailable方法似乎仍将分配的空间留在内存中。

On Windows 10, the System.Drawing.FontFamily.IsStyleAvailable method seems to leave the allocated space into memory even after the Dispose method has been called.

一个简单的控制台应用程序来测试它:

I wrote a simple console application to test it:

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();
        }
    }
}

提前感谢!

推荐答案

t立即释放管理内存。它必须等到GC.Collect发生。

Calling dispose doesn't release manage memory straight away. It has to wait till GC.Collect occurs. If you want to measure memory after Disposing it you should forcefully execute GC.Collect and wait for finalization.

执行强制垃圾收集如下,在你处理内存读取后,你需要执行GC.Collect,然后等待最终确定。请参阅。

Execute forceful garbage collection as below, before you take after disposing memory reading and see.

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

这篇关于在Windows 10 .NET的FontFamily内存泄漏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆