Hallo.
Ich speicher eine Komponente und wenn ich es neu lade wird seltsamerweise der Ladevorgang jedesmal langsamer. Beim ersten laden 1s, beim zweiten schon 2s und dritten dann 3s. Die Komponente bringt selber diese Routine mit. Eventuell sieht jemand den Fehler und kann mir helfen das zu optimieren?
EDIT: Das laden bezieht sich auf das mehrmalige öffnen in der selben laufenden Anwendung. Wenn ich diese beende und das Programm neu starte, fängt das spiel von schnell zu langsam von vorne an.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| TBlockViewer = class(TCustomControl) public property Document: BlockDocument read FBlockDocument write SetBlockDocument; procedure LoadFromTextFile(AFileName: string); end;
procedure TBlockViewer.LoadFromTextFile(AFileName: string); var B: BlockDocument; begin FreeAndNil(FBlockDocument); B := BlockDocument.Create(nil); B.LoadFromTextFile(AFileName); Document := B; end;
BlockDocument = class(TComponent) private FRoot: Root; public procedure LoadFromTextFile(AFileName: string); property BlockRoot: Root read FRoot write FRoot; end;
procedure BlockDocument.Clear; begin BlockRoot.Free; BlockRoot := Root.Create(Self); end;
procedure BlockDocument.LoadFromTextFile(AFileName: string); var F: TFileStream; begin F := TFileStream.Create(AFileName, fmOpenRead); try Clear; LoadBlockDocument(F, Self); finally F.Free; end; end;
procedure LoadBlockDocument(Stream: TStream; BlockDocument: TComponent); var StrStream: TStringStream; BinStream: TMemoryStream; begin StrStream := TStringStream.Create(''); try StrStream.CopyFrom(Stream, Stream.Size); StrStream.Seek(0, soFromBeginning); BinStream := TMemoryStream.Create; try ObjectTextToBinary(StrStream, BinStream); BinStream.Seek(0, soFromBeginning);
BinStream.ReadComponent(BlockDocument); finally BinStream.Free; end; finally StrStream.Free; end; end; |