我想编写一个简单的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();
}
}
输出似乎表明内存仍在被管理,垃圾收集正在完成其工作。有人可以帮我解决这个问题吗?我的目标是确实创建内存泄漏并耗尽系统资源。有人请建议我的代码有什么问题,或者另类,更好的选择。
答案 0 :(得分:3)
对于泄漏,您需要实际泄漏内存。现在,你没有泄漏,因为你释放它:
IntPtr hglobal = Marshal.AllocHGlobal(100);
// DO NOT DO THIS IF YOU WANT A LEAK: Marshal.FreeHGlobal(hglobal);