相关疑难解决方法(0)

有没有办法将进程的当前WorkingSet扩展到1GB?

可能重复:
有没有办法强制进程的WorkingSet在C++中为1GB?

我们希望提前将.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 (请参阅下面的答案).

.net c# .net-4.0

7
推荐指数
1
解决办法
1592
查看次数

Windows是否清除内存页面?

我知道Windows可以选择在关闭时清除页面文件.

当Windows进入或超出范围时,Windows是否对实际的物理/虚拟内存做了什么特别的事情?

例如,假设我运行应用程序A,它将可识别的字符串写入内存中的变量,然后关闭应用程序.然后我运行应用程序B.它分配一大块内存,保留未初始化的内容,并在其中搜索由应用程序A写入的已知字符串.

应用程序B是否有可能获取应用程序A写入的字符串?或者Windows在使内存可用之前擦除内存?

memory windows

3
推荐指数
1
解决办法
2929
查看次数

标签 统计

.net ×1

.net-4.0 ×1

c# ×1

memory ×1

windows ×1