Mich würde aktuell erst einmal interessieren, welche Maßnahmen man versuchen sollte, um auf 150T oder 200T mögliche Objekte zu kommen.
Z.B. eben durch Ersetzen von String durch AnsiString (wo möglich), rausschmeißen von
RTTI oder Generics, oder was sonst noch...?
Zum einen könntest Du nachsehen ob es in deinem Objekt lineare Abhängigkeiten gibt, also Eigenschaften die sich aus anderen Eigenschaften errechnen lassen. Auf diese Eigenschaften könntest Du verzichten.
Dann wäre es eine Überlegung ob Du immer das ganze BO im Speicher halten müsstest oder nur einen bestimmten Teil (sozusagen den Primärindex) dann könntest Du dein BO in mehrere Happen aufteilen die je nach Bedarf geladen werden.
Den Zugriff auf nicht geladene Properties müsstest Du dann natürlich über Methoden implementieren und darauf achten das diese nicht! published sind.
Beispiel (aus dem Handgelenk, aber ich denke das Prinzip wird klar )
Code:
type TBOLazyDataType = record
a,b,c,d : Double;
end;
pBOLazyDataType = ^TBOLazyDataType;
TBObject = class(TObject)
private
FIdentifier : Integer;
LazyData : pBOLazyDataType;
protected
function getLazyDataByIdentifier ( ident : Integer ) : pBOLazyDataType;
function getLazyA : Double;
procedure setLazyA(aValue : Double);
public
Constructor Create;
property
Lazy_A : Double
read getLazyA write SetLazyA;
end;
...
Constructor TBObject.Create;
begin
...
LazyData := nil;
end;
function TBObject.getLazyA : Double;
begin
if not Assigned(LazyA) then
LazyA := getLazyDataByIdentifier(Identifier);
result := LazyA.A;
end;
procedure TBObject.setLazyA(aValue : Double);
begin
if not Assigned(LazyA) then
LazyA := getLazyDataByIdentifier(Identifier);
LazyA.A := aValue;
end;
Außerdem könntest Du nach dem gleichen Prinzip überlegen ob bestimmte BOs bestimmte Eigenschaften bzw. Werte teilen, das ist häufig bei hyrarchischen Daten der Fall die dann nur einmal tatsächlich vorkommen müssten und ansonsten über eine Referenz abgebildet werden.
Und letztendlich könntest Du einfach mal nachsehen ob die irgendwo eine Implementierung eines Baumes rumliegen hast der nur Teile seines Datenbestandes im Speicher hält, falls so was nicht auf Deiner Platte ist könntest Du ja mal hier nachsehen :
http://synopse.info/fossil/wiki?name=Big+Table
cu Ha-Jö
cu Ha-Jö