gpt4 book ai didi

delphi - 通过集合/列表/其他容器使用 AWE Memory 进行数据存储

转载 作者:行者123 更新时间:2023-12-03 15:34:30 24 4
gpt4 key购买 nike

是否有人对自定义数据(delphi 集合、二叉树、DIContainer 等)的存储和处理有任何建议(产品、工具集、方法或其他),这些数据不将自身限制在标准 win32 内存地址空间?极端地说,有没有现成的东西可以相当于保存 10GB TList,从而突破/3GB 开关障碍和 4GB 'windows on windows' 限制?

我们理想地需要的是对 Delphi 应用程序程序员非常透明的东西,但允许非常快速地访问其结构中保存的数据,最好是通过键查找。相当于一个delphi集合容器就可以了,但是它的内存使用需要通过AWE。它还需要负责将其使用的物理空间映射和取消映射到使用它的 win32 进程中,即这将是透明位...

将数据移入数据库并不是答案 - 信息需要保留在内存中以便快速访问。我们尝试过的内存数据库/表没有使用 AWE,而且访问速度也很慢。我们当前的 Delphi 数据结构很好,但超出了 win32 地址空间的限制。

最佳答案

我将成为一个十足的傻瓜,并告诉你我在工作中做了一些比你所描述的更先进的东西。所以我担心这都是闭源的。从来没有在任何地方见过这样的事情。我们将 VM、AWE、MMF 和(很快)32<>64 位 IPC 组合成一台大型平均数据处理机器,可寻址高达 64 GB 的内存,同时处理数百个数据集,每个数据集数十 GB em>.

但我可以给你一些提示:AWE View 交换相当慢,因为它在交换期间强制暂停所有正在运行的线程。因此,明智地选择窗口大小(窗口越小,交换速度越快,但当然,窗口大小越大,调用开销就越低)。我们已将 AWE View 大小设置为等于 Windows 默认页面大小 (4 KB),但这只是因为随机访问以这种方式执行效果最佳。 Lineair 数据访问可以通过更大的 View 尺寸运行得更快。

每个 View 都可以映射到分配的 AWE 内存的任何部分,因此有帮助的一件事是仅将那些页面映射到需要访问的 View 中 - 并尝试节省不必要的 View 交换(优先级队列)我想到了)。

此外,您的设计中应该有一个注册机制来处理 View 和其背后的 AWE 内存之间的链接。而且最好是线程安全的!

至于一般用法:不,这不适合常规的 Delphi 类。您应该完全切换到另一个概念 - 并以此为基础您的数据结构。

无论如何,祝你好运,伙计!你会需要它...;-)

关于delphi - 通过集合/列表/其他容器使用 AWE Memory 进行数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1421445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com