我们希望提前将.NET进程的WorkingSet增加到1GB,以避免页面错误.
有没有办法在.NET中执行此操作?
更新
不幸的是,即使我们调用SetProcessWorkingSetSizeEx,垃圾收集仍会修改工作集,绕过MinWorkingSet(参见下图中的"自动GC.Collect()").
在下面的图片中,有没有办法将进程WorkingSet(绿线)锁定为1GB,以避免在将新内存分配到进程时出现页面错误(红线)的峰值?
这很棒的原因是,每次发生页面错误时,它都会阻塞250us的线程,这会严重影响应用程序性能.

更新
引用自:"Windows via C/C++,Fifth Edition,Jeffrey Richter(Wintellect)"
除非进程只是尝试清空其工作集,否则将忽略单个进程对SetProcessWorkingSetSize的调用.要设置此限制,请在LimitFlags成员中指定JOB_OBJECT_LIMIT_WORKINGSET标志.
本书暗示设置WorkingSet的唯一方法是将进程分配给作业对象并设置JOB_OBJECT_LIMIT_WORKINGSET和MinimumWorkingSetSize.
更新
SetProcessWorkingSetSizeEx与软页面错误完全无关.它仅指硬页面错误,因为它可以防止当前WorkingSet中的内存被分页到硬盘驱动器.
更新
事实证明,增加WorkingSet的唯一方法是使用用C++编写的极其专业的CLR主机来运行.NET (请参阅下面的答案).
我知道Windows可以选择在关闭时清除页面文件.
当Windows进入或超出范围时,Windows是否对实际的物理/虚拟内存做了什么特别的事情?
例如,假设我运行应用程序A,它将可识别的字符串写入内存中的变量,然后关闭应用程序.然后我运行应用程序B.它分配一大块内存,保留未初始化的内容,并在其中搜索由应用程序A写入的已知字符串.
应用程序B是否有可能获取应用程序A写入的字符串?或者Windows在使内存可用之前擦除内存?