锁定/使用/分配内存

时间:2019-07-29 19:46:30

标签: c# memory memory-management

是否有任何选项可以锁定或分配C#中的内存?

场景1: 在我的虚拟机中,有16GB的RAM,要进行测试,我需要使用8GB的RAM,这样8GB的操作系统和其余应用程序将保持“免费”状态

方案2: 具有16GB RAM的同一虚拟机,现在我需要使用14GB RAM。

目前,我创建了一个内存泄漏函数,但这不是很好,因为它会占用我的虚拟机中的所有内存。

type=email

分配或锁定用户(我)将输入到文件的RAM,例如 我要分配/锁定8GB RAM,而程序分配/锁定8GB RAM,而8GB RAM将保持为“免费”

1 个答案:

答案 0 :(得分:0)

如果在Windows机器上运行它,则需要牢记虚拟内存的概念。您可以使用C#为您的心脏内容分配(或泄漏内存),但是,如果基础操作系统认为可以安全地将进程使用的内存分页到分页文件(假设已定义至少一个此类文件),它将执行此操作这样。

让我们以您的第一种情况为例,您要分配8 GB的RAM。您的代码可以精确地做到这一点。但是,您的操作系统可以启动并将代表RAM中已分配数据的某些页面移动到磁盘。内存管理器执行此操作的原因有很多-查看一些here(在“ 页面可以从流程工作集中删除页面... ”部分下)。因此,您将获得原本打算使用的较少RAM。

据我所知,您正在处理一个恒定的工作集,并且我不确定C#(即使在不安全的环境中)是否允许您这样做。您可以尝试调用低级别的Win32函数,可能使用here中所述的P / Invoke,但是就像我说过的那样,我不确定它是否会起作用。

您还必须注意引用您分配的数据的变量。如果GC(垃圾收集器)确定不再需要分配的数据(例如,因为您的剩余代码不再引用该数据),它将很高兴地回收它,再次为您分配的内存更少本来想要的。

关于构建平台的目标平台,您还没有真正说过任何话。内存不足错误将在为x86(或AnyCPU +优选32位)构建的进程(仅分配约3 GB)之后更早引发,因为这就是things work in Wow64的方式。

如果您不必真正使用C#编写代码来进行分配,则也许只需调用Testlimit之类的代码(并尝试设置最小工作集即可)。

相关问题