内存不足,无法执行此操作错误-Delphi 5和BDE

内存不足,无法执行此操作错误-Delphi 5和BDE,delphi,bde,Delphi,Bde,我有一个用Delphi5开发的应用程序,它使用BDE访问SQL Server数据库。此应用程序通常在Windows Server 2012上运行 该产品已经历了基础架构更改,现在在其他64位Windows Server 2012和2016虚拟机上运行(以前的机器不再存在)。通过此更改,客户开始报告错误: 内存不足,无法执行此操作 所有客户都报告以前没有出现问题 重要!此错误仅在选择大量记录时发生。例如,返回超过45000条记录、150列、多个文本和1个blob的产品查询 同样,客户声称此问题在更

我有一个用Delphi5开发的应用程序,它使用BDE访问SQL Server数据库。此应用程序通常在Windows Server 2012上运行

该产品已经历了基础架构更改,现在在其他64位Windows Server 2012和2016虚拟机上运行(以前的机器不再存在)。通过此更改,客户开始报告错误:

内存不足,无法执行此操作

所有客户都报告以前没有出现问题

重要!此错误仅在选择大量记录时发生。例如,返回超过45000条记录、150列、多个文本和1个blob的产品查询

同样,客户声称此问题在更改之前没有发生

我已经浏览了许多博客、论坛、StackOverflow本身,并在BDEMinistrator中进行了许多配置,主要是SHAREDMEMSIZE和SHAREDMEMLOCATION的参数。我在谷歌找到的所有可能的组合都没有成功。我甚至安装了EMET工具,试图解决地址空间布局随机化(ASLR)问题,但毫无效果

默认组合:SHAREDMEMSIZE=4096和SHAREDMEMLOCATION=0x5BDE以及其他几个组合已经设置好,没有任何效果

通过Windows任务管理器跟踪应用程序的执行,它会消耗内存,直到发生错误时达到609 Mb。我注意到,即使SHAREDMEMSIZE和SHAREDMEMLOCATION等BDE参数的参数较小,这种内存消耗也是相同的。应用程序总是达到609 Mb,并且会发生错误

我还能试着解决这个问题吗?有人有补充提示吗


我知道BDE是一项非常(非常)古老的技术,但该系统非常庞大和复杂,我目前无法移植到其他技术。

该应用程序运行在Windows远程桌面服务RemoteApp框架上,托管在Azure上。因此,我使用的是Windows Server 2012/2016。在之前的框架中,它也在Windows Server 2012上运行。听起来你很可能被卡住了。我希望你已经将BDE的BlobsToCache设置为-1了?ISTR blob缓存是BDE内存不足错误的常见原因。在某个时候,20年的技术债务会追上你。您可能别无选择,只能迁移或恢复某些硬件和软件的组合,以使其继续工作。困扰BDE的另一件事是来自其他程序的竞争——同时运行的多个BDE应用程序必然会共享资源。我见过旧的BDE应用程序,如果它们单独运行就可以工作,但同时运行不同的应用程序(也构建在BDE上)会导致内存不足错误。该服务器上还有其他BDE应用程序吗?@MartynA,此参数实际上不是-1。但是我现在用这个修改做了测试,结果是一样的@J、 实际上,这种技术债务是非常昂贵的。当我得知我们假设的软件正在使用BDE时,我看到了许多问题。但是我们已经有了迁移web应用程序前端的计划。好的方面是,前一个开发该产品的团队做了一些事情,这至少会使迁移变得更容易。在服务器上,仅运行一个使用BDE的应用程序。当我们使用远程桌面和AD+GPO时,我们能够限制用户只使用一个应用程序。我们拥有的是同一台计算机上的多个用户。该应用程序在Windows远程桌面服务RemoteApp framework上运行,并托管在Azure上。因此,我使用的是Windows Server 2012/2016。在之前的框架中,它也在Windows Server 2012上运行。听起来你很可能被卡住了。我希望你已经将BDE的BlobsToCache设置为-1了?ISTR blob缓存是BDE内存不足错误的常见原因。在某个时候,20年的技术债务会追上你。您可能别无选择,只能迁移或恢复某些硬件和软件的组合,以使其继续工作。困扰BDE的另一件事是来自其他程序的竞争——同时运行的多个BDE应用程序必然会共享资源。我见过旧的BDE应用程序,如果它们单独运行就可以工作,但同时运行不同的应用程序(也构建在BDE上)会导致内存不足错误。该服务器上还有其他BDE应用程序吗?@MartynA,此参数实际上不是-1。但是我现在用这个修改做了测试,结果是一样的@J、 实际上,这种技术债务是非常昂贵的。当我得知我们假设的软件正在使用BDE时,我看到了许多问题。但是我们已经有了迁移web应用程序前端的计划。好的方面是,前一个开发该产品的团队做了一些事情,这至少会使迁移变得更容易。在服务器上,仅运行一个使用BDE的应用程序。当我们使用远程桌面和AD+GPO时,我们能够限制用户只使用一个应用程序。我们拥有的是同一台机器上的多个用户。