- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个进行科学模拟的delphi应用程序。它的复杂性不断增加,现在由许多单元和形式组成。
每次运行时我都会开始收到 EOutOFMemory 错误。它似乎发生在我在函数中临时使用变体数组期间或之后。冒着问一个非常愚蠢的问题的风险,“变体数组”是在自找麻烦吗? (我可以将所有内容都转换为字符串,但原则上变体数组可以节省很多捏造的东西)。
有问题的数组使用可能是:
Function TProject.GetCurrentProjParamsAsArray(LProjectName, LProjectType : ShortString): ArrayOfVariant;
Var
ArrayIndex : Word;
begin
SetLength (Result,54);
ArrayIndex := 0;
Result [ArrayIndex] := LProjectName; Inc(ArrayIndex);
Result [ArrayIndex] := LProjectType; Inc(ArrayIndex); // this structure makes it easier to add extra fields in the DB than hard coding the array index!!
Result [ArrayIndex] := FileTool.DateTimeForFileNames ; Inc(ArrayIndex);
Result [ArrayIndex] := SiteAndMet. SiteName ; Inc(ArrayIndex);
Result [ArrayIndex] := SiteAndMet. PostCode ; Inc(ArrayIndex);
Result [ArrayIndex] := SiteAndMet. MetFileNamePath ; Inc(ArrayIndex);
Result [ArrayIndex] := SiteAndMet. SiteLat ; Inc(ArrayIndex);
Result [ArrayIndex] := SiteAndMet. SiteLong ; Inc(ArrayIndex);
Result [ArrayIndex] := SiteAndMet. SiteAlt ; Inc(ArrayIndex);
Result [ArrayIndex] := SiteAndMet. TZoneIndex ; Inc(ArrayIndex);
Result [ArrayIndex] := SiteAndMet. TZoneHours ; Inc(ArrayIndex);
Result [ArrayIndex] := SiteAndMet. TZoneMeridian ; Inc(ArrayIndex);
Result [ArrayIndex] := SiteAndMet. Albedo ; Inc(ArrayIndex);
Result [ArrayIndex] := SiteAndMet. ArrayTilt ; Inc(ArrayIndex);
Result [ArrayIndex] := SiteAndMet. ArrayAzimuth ; Inc(ArrayIndex);
在任务管理器中 - 峰值内存使用量为 42MB,VM 为 31M,每次运行时出现约 90,000 个页面错误。 (在具有 3GB 内存的 xp 机器上)
有人有关于监视应用程序中不同组件的内存使用情况的一般提示吗?或者追踪这个错误的原因?
最近我已经从将主要项目数据存储为 CSV 转为使用 ADO DB,同时,我也开始使用 Variant 数据类型,而不是一直在字符串和单/ double 之间进行转换。
我遵循了各种节省内存的技巧,例如,在实用的情况下,我删除了 Application.CreateForm(TProject, Project); .dpr 中的语句并动态创建它们。 (除非大部分时间都使用表格)。一般来说,我使用最小的实用数据类型(字节、短字符串等)并最小化“公共(public)”变量和函数的使用
非常欢迎任何提示,布莱恩
最佳答案
当内存管理器无法为给定的分配请求找到连续的内存块时,就会发生
EOutOfMemory
。因此,您要么 1) 分配比预期更多的内存,2) 泄漏已成功分配的内存,或 3) 内存碎片(不一定泄漏),因此内存管理器必须随着时间的推移不断分配越来越多的内存。
当异常发生时,查看调用堆栈。这将导致您发现无法分配内存的代码。要获取调用堆栈,请在调试器中运行应用程序,或使用异常日志记录框架,例如 MadExcept、EurekaLog、JCLExcept 等。
关于Delphi:如何查找并修复 EOutOfMemory 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10031947/
我正在使用带有 Unicode 字符串的 Delphi 2009。 我正在尝试对一个非常大的文件进行编码以将其转换为 Unicode: var Buffer: TBytes; Value: s
我正在构建一个进行科学模拟的delphi应用程序。它的复杂性不断增加,现在由许多单元和形式组成。 每次运行时我都会开始收到 EOutOFMemory 错误。它似乎发生在我在函数中临时使用变体数组期间或
我正在使用 Delphi 从关系数据库中的数据创建 XML 文档。它在小型数据集上测试良好,但是当我尝试将数据集的大小扩展到生产级别时,它最终会在节点创建期间出现 EOutOfMemory 异常。 我
我有一个 32 位 Delphi 应用程序,在/LARGEADDRESSAWARE 标志打开的情况下运行。这允许在 64 位系统上分配最多 4GB 的空间。 我使用线程(在池中)来处理文件,其中每个任
我有一个大的 XML 文件要在代码中解析,如下例所示。问题似乎是分配给子节点 (IXMLNode) 的内存未释放,即使子节点超出范围也是如此。内存似乎只有在父 TXMLDocument 被停用 (Ac
我是一名优秀的程序员,十分优秀!