C# 创建内存泄漏的C代码。
我想编写一个简单的C#程序/控制台应用程序来创建一个缓慢且可控的内存泄漏。我希望程序慢慢消耗掉系统内存。我需要这个来做我正在测试的其他东西 有人建议我使用:C# 创建内存泄漏的C代码。,c#,memory,memory-leaks,C#,Memory,Memory Leaks,我想编写一个简单的C#程序/控制台应用程序来创建一个缓慢且可控的内存泄漏。我希望程序慢慢消耗掉系统内存。我需要这个来做我正在测试的其他东西 有人建议我使用: Marshal.AllocHGlobal(numbytes) 附在计时器上的 以下是我试图实现的代码: class Program { static Timer timer = new Timer(); static void Main(string[] args) { timer.Elapsed
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();
}
}
输出似乎表明内存仍在管理中,垃圾收集正在完成它的工作。有人能帮我解决这个问题吗?我的目标是确实造成内存泄漏并耗尽系统资源。有人请建议我的代码有什么问题,或者一个更好的选择 对于泄漏,您需要实际泄漏内存。现在,您不会泄漏任何,因为您释放了它:
IntPtr hglobal = Marshal.AllocHGlobal(100);
// DO NOT DO THIS IF YOU WANT A LEAK: Marshal.FreeHGlobal(hglobal);
对于泄漏,您需要实际泄漏内存。现在,您不会泄漏任何,因为您释放了它:
IntPtr hglobal = Marshal.AllocHGlobal(100);
// DO NOT DO THIS IF YOU WANT A LEAK: Marshal.FreeHGlobal(hglobal);
对于泄漏,您需要实际泄漏内存。现在,您不会泄漏任何,因为您释放了它:
IntPtr hglobal = Marshal.AllocHGlobal(100);
// DO NOT DO THIS IF YOU WANT A LEAK: Marshal.FreeHGlobal(hglobal);
对于泄漏,您需要实际泄漏内存。现在,您不会泄漏任何,因为您释放了它:
IntPtr hglobal = Marshal.AllocHGlobal(100);
// DO NOT DO THIS IF YOU WANT A LEAK: Marshal.FreeHGlobal(hglobal);
当你说“内存泄漏”时,你是指GC不会释放的内存分配吗?为什么不直接将数据推送到引用列表中?创建一个无限循环来进行一些计算。调用
Marshal.FreeHGlobal
deallocate您刚才分配的内存?我很好奇这是什么应用程序。听起来很有趣。我认为雅各布的建议是最好的。只需分配一个列表
,然后在循环中向其添加对象。你可以拥有真正的粒度控制,因为如果你想每秒增加16个字节,你可以定义一个具有3个int的类(假设我们在32位窗口上,12个字节用于对象4作为参考),然后在循环中放入1000毫秒的睡眠。当你说“内存泄漏”时,你是指GC不会释放的内存分配吗?为什么不直接将数据推送到引用列表中?创建一个无限循环来进行一些计算。调用Marshal.FreeHGlobal
deallocate您刚才分配的内存?我很好奇这是什么应用程序。听起来很有趣。我认为雅各布的建议是最好的。只需分配一个列表
,然后在循环中向其添加对象。你可以拥有真正的粒度控制,因为如果你想每秒增加16个字节,你可以定义一个具有3个int的类(假设我们在32位窗口上,12个字节用于对象4作为参考),然后在循环中放入1000毫秒的睡眠。当你说“内存泄漏”时,你是指GC不会释放的内存分配吗?为什么不直接将数据推送到引用列表中?创建一个无限循环来进行一些计算。调用Marshal.FreeHGlobal
deallocate您刚才分配的内存?我很好奇这是什么应用程序。听起来很有趣。我认为雅各布的建议是最好的。只需分配一个列表
,然后在循环中向其添加对象。你可以拥有真正的粒度控制,因为如果你想每秒增加16个字节,你可以定义一个具有3个int的类(假设我们在32位窗口上,12个字节用于对象4作为参考),然后在循环中放入1000毫秒的睡眠。当你说“内存泄漏”时,你是指GC不会释放的内存分配吗?为什么不直接将数据推送到引用列表中?创建一个无限循环来进行一些计算。调用Marshal.FreeHGlobal
deallocate您刚才分配的内存?我很好奇这是什么应用程序。听起来很有趣。我认为雅各布的建议是最好的。只需分配一个列表
,然后在循环中向其添加对象。你可以有真正的细粒度控制,也就是说,如果你想每秒增加16个字节,你可以用3个int定义一个类(假设我们在32位窗口上,12个字节用于对象4作为参考),然后在循环中放入1000毫秒的睡眠代码>仍然没有泄漏。输出显示,当proc.PrivateMemorySize64达到22585344时,它会下降到一个较低的数字,并增长到22585344。这只是继续下去。此外,任务管理器显示系统内存使用没有增加。我在这里遗漏了什么吗?@Zolt是22585344进程虚拟地址空间的大小?所以我注释掉了Marshal.FreeHGlobal(hglobal)代码>仍然没有泄漏。输出显示,当proc.PrivateMemorySize64达到22585344时,它会下降到一个较低的数字,并增长到22585344。这只是继续下去。此外,任务管理器显示系统内存使用没有增加。我在这里遗漏了什么吗?@Zolt是22585344进程虚拟地址空间的大小?所以我注释掉了Marshal.FreeHGlobal(hglobal)代码>仍然没有泄漏。输出显示,当proc.PrivateMemorySize64达到22585344时,它会下降到一个较低的数字,并增长到22585344。这只是继续下去。此外,任务管理器显示系统内存使用没有增加。我在这里遗漏了什么吗?@Zolt是22585344进程虚拟地址空间的大小?所以我注释掉了Marshal.FreeHGlobal(hglobal)代码>仍然没有泄漏。输出显示,当proc.PrivateMemorySize64达到22585344时,它会下降到一个较低的数字,并增长到22585344。这只是继续下去。此外,任务管理器显示系统内存使用没有增加。我是不是遗漏了什么?@Zolt是22585344进程虚拟地址空间的大小?