C#代码创建内存泄漏。

时间:2013-12-12 23:23:04

标签: c# memory memory-leaks

我想编写一个简单的C#程序/控制台应用程序来创建缓慢且受控的内存泄漏。我希望程序慢慢耗尽系统内存。我需要这个我正在测试的其他东西。

有人建议我使用:

Marshal.AllocHGlobal(numbytes)

附加到计时器。

以下是我尝试实施的代码:

class Program
{
    static Timer timer = new Timer();

    static void Main(string[] args)
    {
        timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);

        start_timer();
        Console.Read();
    }

    static void timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        IntPtr hglobal = Marshal.AllocHGlobal(100);
        Marshal.FreeHGlobal(hglobal);

        Process proc = Process.GetCurrentProcess();
        Console.WriteLine(proc.PrivateMemorySize64);
    }

    private static void start_timer()
    {
        timer.Start();
    }
}

输出似乎表明内存仍在被管理,垃圾收集正在完成其工作。有人可以帮我解决这个问题吗?我的目标是确实创建内存泄漏并耗尽系统资源。有人请建议我的代码有什么问题,或者另类,更好的选择。

1 个答案:

答案 0 :(得分:3)

对于泄漏,您需要实际泄漏内存。现在,你没有泄漏,因为你释放它:

    IntPtr hglobal = Marshal.AllocHGlobal(100);
    // DO NOT DO THIS IF YOU WANT A LEAK: Marshal.FreeHGlobal(hglobal);