Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Providers (https://www.clubdelphi.com/foros/forumdisplay.php?f=10)
-   -   Acelerar TClientDataset con Midas Speed Fix (https://www.clubdelphi.com/foros/showthread.php?t=84365)

cloayza 10-10-2013 20:40:04

Acelerar TClientDataset con Midas Speed Fix
 
Quiero compartir con ustedes algo que encontré en la web, no se si ya alguien lo ha comentado pero aquí va...

Problema:
Tengo varias aplicaciones entre las cuales se produce intercambio de datos a traves de archivos .XML que son creados con TClientDataset.

La apertura de estos archivos cuando son de pocos registros no es preocupación, pero cuando estos son de varios cientos de registros, SI que hay problema por lo lento de esta accíon.

Solución
Debido a esto comenze buscar alguna información de como se podría acelerar el acceso a estos y encontre esta página Midas Speed Fix – Unit de Cesar Romero.

!Corrección! Fué Andreas Hausladen quien realizó la mejora...Disculpas

Al principio no le tenía mucha fé pero la descarge y me decidi a probar esta solución, mi sorpresa fué enorme al ver que funciona muy bien bajando los tiempos de apertura y lectura de datos de manera considerable.

Pasos:
1) Descargar unidades Midas Speed Fix – Unit
2) Agregar al proyecto
3) Compilar

Problemas
Yo realize todo esto con Delphi XE2 y existen 2 problemillas de facil solución

Error 1:
Cita:

[DCC Error] MidasSpeedFix.pas(187): E2033 Types of actual and formal var parameters must be identical
Solución:
Código Delphi [-]
procedure HookProc(Proc, Dest: Pointer; var BackupCode: TXRedirCode);
var
  n: NativeUInt; //DWORD;
  Code: TXRedirCode;
begin
  Assert(Proc <> nil);
  if ReadProcessMemory(GetCurrentProcess, Proc, @BackupCode, SizeOf(BackupCode), n) then
  begin
    Code.Jump := $E9;
    Code.Offset := PAnsiChar(Dest) - PAnsiChar(Proc) - SizeOf(Code);
    WriteProcessMemory(GetCurrentProcess, Proc, @Code, SizeOf(Code), n);
  end;
end;

Error 2:
Cita:

[DCC Error] MidasSpeedFix.pas(201): E2033 Types of actual and formal var parameters must be identical
Solución
Código Delphi [-]
rocedure UnhookProc(Proc: Pointer; var BackupCode: TXRedirCode);
var
  n: NativeUInt; //Cardinal
begin
  if (BackupCode.Jump <> 0) and (Proc <> nil) then
  begin
    WriteProcessMemory(GetCurrentProcess, Proc, @BackupCode, SizeOf(BackupCode), n);
    BackupCode.Jump := 0;
  end;
end;

Copilar y Ok...

Según lo indicado por Cesar esta unit esta soportada para "suporta desde o Delphi 6 até o 2009", como les comente yo la implemente en XE2.

Espero que les sea de utilidad como fué para mí.:D

Casimiro Notevi 10-10-2013 20:54:15

Gracias por compartirlo :)

jhonny 11-10-2013 19:21:50

Me sumo a darte las gracias, interesante aporte :).


La franja horaria es GMT +2. Ahora son las 17:10:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi