我在一些客户端声明MidasLib以避免由Midas.dll引起的dll地狱.
下面的代码运行大约2350ms.如果我在使用中删除了MidaLib声明,它将在45毫秒内开始运行!!
data.xml文件使用TClientDataSet.SaveToFile方法保存,有5000条记录,大小约为600Kb.
有谁知道如何解释这种奇怪的行为?
我可以在Delphi XE2 upd 3和Delphi XE3 upd 2中确认问题.
谢谢.
program Loader;
{$APPTYPE CONSOLE}
{$R *.res}
uses
MidasLib,
System.SysUtils,
Winapi.Windows,
Data.DB,
Datasnap.DBClient;
var
cds : TClientDataSet;
start, stop : Cardinal;
begin
cds := TClientDataSet.Create(nil);
try
start := GetTickCount;
cds.LoadFromFile('c:\temp\data.xml');
stop := GetTickCount;
Writeln(Format('Time elapsed: %dms', [stop-start]));
finally
cds.Free;
end;
end.
Run Code Online (Sandbox Code Playgroud) 对于我在Delphi 2010中工作的模拟程序.模拟不是问题,但我需要使用大量数据来解决问题.数据在Excel工作表中可用,因此无需在Delphi中编辑此数据,但从Excel工作表中收集此数据大约需要10分钟.只要您不需要在每次程序运行时收集数据,这都不是问题.所以我制作了一个程序,收集所有数据使其可见,而不是问题,然后存储它.但是我无法将其存储为"Delphi格式",而不会丢失结构,因此可以在几秒钟内加载.
我不是那么熟悉Delphi,我搜索了很长时间才得到解决方案,但却无法理解什么是最好的.我认为我构建数据的方式是错误的,但它很简单而且有效.但是,如果有更好的存储数据的方法请说明,但请记住,我需要更多的解释,而不仅仅是使用'xml文件','generict或'Ttreeview'.(已阅读但无法使用它).
数据适用于:我制作了这个产品,我制作的下一个产品就是这个,所以我需要清洁吗?对或错.
数据存储为带有Productnumber(整数)的类(TObject)和包含下一步可以生成的所有产品的List.此列表包含另一个带有Productnumber(整数)的类(TObject),我需要清理(布尔).我想将此结构保存在文件中,而不会丢失数据并将其读回相同的结构.
我希望有人可以提供帮助.先感谢您.
更新:提供更多信息的代码(修改为英文)
Clean_from = class(TObject)
public
myfromNumber : Integer;
mylist : TList;
published
constructor Create;
End
Clean_To = class(TObject)
public
myToNumber : Integer;
Clean : Boolean;
End;
constructor Clean_from.Create;
begin
inherited Create;
myList := Tlist.Create;
end;
For i = 0 to 100 do
begin
From:= Clean_from.create;
for j := 0 to 10 do
begin
To := Clean_To.create;
To.clean := true or false;
From.myList.add(To);
end;
GlobalList.add(from);
end;
Run Code Online (Sandbox Code Playgroud)
现在我想用所有内容保存全局列表,以便我可以使用相同的结构加载它.