我建立一个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和我得到每轮〜90000个错误。 (XP的机器与3GB RAM上)
有没有人对我的应用程序中的不同组件监控内存使用任何通用的技巧? 或者在跟踪这个错误的原因是什么?
最近,我从主项目数据为CSV存储使用ADO数据块,同时我一直在使用Variant数据类型,而不是转换betweem串和单/双所有的时间也开始了。
我已经按照不同的存储器中保存的提示,我可以找到等等,其中实际我已经删除了Application.CreateForm(TProject,项目); 从.dpr并动态创建这些语句。 (除非该形式正在使用的大部分时间反正)。 Generaly我用最小的实际数据类型(字节,ShortString短等),并最大限度地减少使用“公共”变量和函数
任何提示非常欢迎,布赖恩