I'm testing SmartFetch with SQL Server on some large table (several millions lines, about 20 columns, no BLOBs or texts). All connection settings are by default so OLEDB client should be used.
Indeed, SmartFetch is more rapid to extract data but the memory consumption is the same as I have without SmartFetch.
What's happened?
Open without SmartFetch
Elapsed 22 sec
Memory usage: 1377 MB
Open with SmartFetch, LiveBlock = false
Elapsed 5 sec
Memory usage: 1409 MB
Open with SmartFetch, LiveBlock = true
Elapsed 6 sec
Memory usage: 1409 MB
Code: Select all
MemUsage1 := CurrentProcessMemory;
Started := Now;
Memo1.Lines.Add('Open without SmartFetch');
UniTable1.Open;
Memo1.Lines.Add(Format('Elapsed %d sec', [SecondsBetween(Now, Started)]));
Memo1.Lines.Add(Format('Memory usage: %d MB', [(CurrentProcessMemory - MemUsage1) div (1024 * 1024)]));
UniTable1.Close;
Memo1.Lines.Add('Open with SmartFetch, LiveBlock = false');
UniTable1.SmartFetch.Enabled := true;
UniTable1.SmartFetch.LiveBlock := false;
MemUsage1 := CurrentProcessMemory;
Started := Now;
UniTable1.Open;
Memo1.Lines.Add(Format('Elapsed %d sec', [SecondsBetween(Now, Started)]));
Memo1.Lines.Add(Format('Memory usage: %d MB', [(CurrentProcessMemory - MemUsage1) div (1024 * 1024)]));
UniTable1.Close;
Memo1.Lines.Add('Open with SmartFetch, LiveBlock = true');
UniTable1.SmartFetch.Enabled := true;
UniTable1.SmartFetch.LiveBlock := true;
MemUsage1 := CurrentProcessMemory;
Started := Now;
UniTable1.Open;
Memo1.Lines.Add(Format('Elapsed %d sec', [SecondsBetween(Now, Started)]));
Memo1.Lines.Add(Format('Memory usage: %d MB', [(CurrentProcessMemory - MemUsage1) div (1024 * 1024)]));
UniTable1.Close;