- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
VirtualLock
的目的WinAPI 调用是将页面锁定到进程的工作集。然而,WorkingSet64
API 莫名其妙地不计算这些页面。
可能因此,neither Process Explorer也不是标准 Task Manager在每个进程的内存使用统计信息中计算锁定的页面。
这是怎么回事?熟悉 WinNT 中虚拟内存的人能否阐明这种不一致,这可能导致千兆字节的已用 RAM 基本上未被检测到? (想想 SQL Server 或 VirtualBox)
最佳答案
啊,这很容易解释:您使用了错误的 API。 GetProcessWorkingSetSize 查询最小和最大工作集大小。这些是
配额,不是实际值。
最小工作集大小是 Windows 将保证在世界末日之前保持锁定在 RAM 中的大小。最大工作集大小是 Windows 在将页面移入池之前允许您的进程使用的内存量(它们不一定消失,但访问它们会导致错误并重新映射)。
编辑:
因为现在很清楚你没有使用错误的 API(只是命名错误的函数),我已经做了一些测试(
VirtualAlloc
和内存映射文件,两者结合
VirtualLock
) 在我的 XP 系统上。乍一看,你似乎完全正确。从一个 650MB 的文件中分配 512MB 或内存映射 512MB 使虚拟大小增加了 512MB,但没有增加工作集。跟随
VirtualLock(512MB)
根本不会影响工作集!
然后我想到
VirtualLock
在每种情况下都花费了零时间,这似乎不太合理,例如因为必须从磁盘中获取 0.5 GB。所以,我检查了返回码并猜测是什么。 Windows 认为锁定 512MB 不是一个好主意,并且会拒绝这样做。
只用 64MB 重复实验,看,工作集立即增加了 64MB,这是应该的。因此,一言以蔽之:“对我有用”。
为了确定,您确实检查了返回码?
再看一眼,这种行为甚至是明确定义和有据可查的。
VirtualLock
的文档明确指出:
The maximum number of pages that a process can lock is equal to the number of pages in its minimum working set minus a small overhead.
在适当设置 WS 配额后,使用和不使用锁定:
VirtualBox则不同,你在任务管理器中看到的只是“Interface”程序和“Manager”前端的工作集,两者的工作集大小始终保持在64M以下。虽然我不确定它可能在某些驱动程序中分配了哪些内存,或者它们是否锁定了内存。
我目前正在运行 2 个虚拟机,每个虚拟机的主内存为 1.6GB。看看我的 32 位 Windows 如何只看到 3.25GB,如果属于 VM 的内存被锁定,那将只剩下 50MB。此外,Process Explorer 告诉我,仅 Firefox 就有一个 474MB 的工作集,并且在我键入此内容时还在上升(神圣的......?!!)。这并不意味着虚拟机中的所有内存都真的被锁定了,因为这样的数字在那时是完全不可能的。
根据要求,这是 VMMap 的截图:
诚然,这些数字很有趣……VM 总共有 1.6M,根据 VMMap,其中 821MiB 已保留,772MiB 已提交,Process Explorer 仅分别显示 163MiB 和 54MiB。那里肯定有问题,但我怀疑这可能是一些晦涩的 VirtualBox 黑客攻击,而不是 Windows 问题。
关于windows - 为什么锁定页面不计入工作集大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5649142/
假设我有父页面。 当我单击“打印”时,会打开一个新选项卡(页面)以进行打印预览。 我想要的是,当我单击“打印”时,父选项卡(页面)上应显示覆盖层,以停止进一步的工作,直到子选项卡关闭。 Because
我知道这是不可能的,但我想我还是会问这个问题。 我有一个 HTTPS 页面,并且正在动态创建一个表单。我想将表单发布到 HTTP 页面。在浏览器不弹出警告的情况下这可能吗?当我在 IE8 上执行此操作
在我的应用程序中,我实现了ajax 4.0客户端模板 目前我的模板位于同一个.aspx页面上。 (例如 Main.aspx) 但我想将它们外部化。(即所有 HTML 都会放在另一个页面上) 为此,我使
我目前正在构建自己的网络应用程序。在此应用程序的标题中有一个导航栏。 我将相同的导航栏添加到我的所有 html 页面,以便在页面之间导航时保持可见,并将导航元素设置为事件到我现在所在的页面。 我的
我们有一个在集成管道下运行的 IIS7 Intranet 站点,该管道主要是 ASP.Net,带有一些传统的经典 ASP 页面。该站点允许匿名访问大多数区域,但使用 Windows 身份验证来保护某些
有一个要求,我需要根据 div 标签的高度超过 700 像素的条件将大型 HTML 页面拆分为多个页面。 我还可以根据字数拆分页面。 下面的示例根据 HTML 标签分割页面,而我需要根据 div 高度
有两个 html 页面,如果在第一个页面中单击特定图像,它将转到第二个 html 页面。如果在第二个 html 页面上的任何地方单击它应该返回到第一页并将第二页完全显示在第一页的一个 div 中 1s
我有一个简单的 hello world Servant 应用程序。我需要向它添加一些静态或动态的 html 页面。我怎样才能做到这一点?在文档中没有提到它。注意我不想在 Haskell 代码中创建 h
我有两个文件 index.html 和 index2.html。这两个文件都在本地机器上的同一目录中(无法访问 PHP 等)。 我正在努力 Page Title 使用 jQuery 从 index.h
假设我有一个 JSP 页面 index.jsp User id:
我面临着一个对我来说非常陌生的情况。我会尽力让事情变得简单来解释它一步一步来。 1)在页面 A(用户表单)中,我从字段中获取一些值并将其作为 jQuery AJAX POST 发送到页面 B。这是主要
我正在尝试弄清楚如何从 buttons.html 获取用户按钮点击动态切换第二个列的可见性 userinput.html 。我正在使用 DataTables userinput.html表并认为我有
我有asp。净 mvc4 项目。 Angularjs 已集成。 我已经按照以前的要求构建了 HTML 页面和 WEB API 2。 现在出于某种原因,我必须使用 CSHTML 页面。以前我只有 web
我的网站包含大约 18 个不同的页面。以管理员身份登录后,我单击“页面”。 我看到了以下内容 All (20) | Mine (19) | Published (19) | Draft (1) No
Haskell 中每个函数都有手册页吗?换句话说,我可以在某处输入 man fst 并获取有关该函数的手册或帮助页面吗?我发现大量的功能势不可挡! 我正在使用 GHC 和 GHCi。 最佳答案 我不知
我一直在用github pages很长一段时间以来,并使用自定义域重定向功能来重定向我的 user website来自 prahladyeri.github.io到我自己的域名 https://www
我对 Github 有一个基本的了解:我知道如何创建、添加、提交、推送和克隆存储库。我也开始探索 Github 页面来托管我的项目。我的最新项目于 3 月开始并将其推送到 gh-page。从那以后,我
在尝试查看日志时,Airflow 会抛出一个带有以下消息的 oops 页面: File "/Users/user/.pyenv/versions/3.5.2/lib/python3.5/locale.
我已经按照此处列出的步骤 (https://pages.github.com/) 为我正在处理的网站设置了一个 GitHub 页面 我设置的站点当前托管在 IIS 下,并使用 URL Rewrite
我想将我的 domain.com 重定向到 openshift 页面 (openshift-app.rhcloud.com)。我已经按照描述完成了 here它有效。唯一的问题是,在任何网站上,我都不会
我是一名优秀的程序员,十分优秀!