【问题标题】:Flexibility of page file on Windows x64Windows x64 上页面文件的灵活性
【发布时间】:2011-06-07 18:09:45
【问题描述】:

在为 x64 开发 Windows 应用程序时,Windows Vista 和 Windows 7 x64 上的用户地址空间为 8TB。

假设我有一个应用程序消耗的物理内存比正常工作集中的可用物理内存 (500MB-1GB) 少得多,此外,我还有 更多 比这更多(比如说 3GB- 4GB)在不同的块中(比剩余的内存大小小得多——比如说100MB),它们将被专门加载。当然,虽然从技术上讲,我可以轻松地在地址空间中添加额外的 4GB,但实际情况是,除了具有 6-8GB RAM 的高端计算机之外,大部分都必须进行分页。

问题是,我是否会通过为单个应用程序消耗大量页面内存来耗尽页面文件来破坏计算机的性能?或者,等效地,我可以放入页面文件的内存量的适当最大值是多少?

此外,这实际上会提高我在高端机器上的性能,而不是在适当的时间从相关文件手动加载数据吗?

【问题讨论】:

    标签: windows 64-bit


    【解决方案1】:

    如果您的不同块已存储为文件,则将它们视为memory mapped files。通过这样做,您的应用程序不必管理读取/写入数据。此外(与您的问题密切相关),数据由磁盘上的文件而不是系统的页面文件支持。

    由操作系统来管理系统的资源。当前页面文件通常仅受可用磁盘空间的限制。操作系统将通过平衡分配给每个进程的物理分配来管理系统的性能。物理内存分配而不是页面文件使用更有可能导致其他正在运行的应用程序出现性能问题。

    您可以考虑提供一个设置来切换您的应用程序将使用多少内存,以防任何客户看到不利的性能影响。

    【讨论】:

    • 首先,这不会解决处理文件内数据所花费的任何时间。如果我有,尤其是文本格式,我希望将其存储为转换后的二进制格式,而不是原始文本格式。 MMF 需要在双方使用相同的格式。其次,与仅正常加载文件相比,第一次使用文件时必须读取文件实际上并没有改变任何内容。将它们加载到内存中的目的是预先加载它们,然后仅在机器处于低内存条件时才将它们分页到磁盘。
    • 哦,特别是,这不能解决我正在讨论的内存不连续的情况——我必须打包和解包它。
    • MMF 只是一个建议,如果条件合适的话,尤其是通用格式。过去,我使用 MMF 读取大型数据集,因此我不必编写 IO 和内存分配部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2020-10-13
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多