![]() |
Unit IniFiles bläht Programm auf
Hallo,
in einem Programm (nur ein Programmstarter ohne GUI) von mir verwende ich die Unit IniFiles. Unter Delphi 2007 hatte das Kompilat mit dieser Unit eine Größe von 107kB. Dasselbe Programm unter Delphi XE ohne Änderung meines Sourcecodes hat eine Größe von 332kB. Ok, also habe ich mir mal den Sourcecode von IniFiles (aus Delphi XE) angesehen und mir die 3 benötigten Funktionen daraus kopiert und so umgeschrieben das diese auch ohne Verwendung einer Klasse funktionieren. Jetzt ist das Programm unter Delphi 2007 erstellt nur noch 53,5kB groß. Wird unter Delphi XE kompiliert erhalte ich eine Dateigröße von 91,5kB. Mir ist schon klar das die unter Delphi XE kompilierten Programme standardmäßig größer geworden sind, aber das nur die Verwendung der Unit IniFiles das Programm um 225kB aufbläht finde ich recht viel. Kennt jemand eine Alternative zur standardmäßig mitgelieferten Unit IniFiles? Die Unit FastIniFiles habe ich schon probiert, da ist die Dateigröße des Programmes unter Verwendung von Delphi XE 320KB groß. |
AW: Unit IniFiles bläht Programm auf
Die unit Inifiles ist eigentlich sehr sehr klein, aber sie bindet auch noch die sehr großen Units SysUtils und Classes mit ein, was viel ausmacht, wenn man sie nicht schon im Programm hat :zwinker:
Tja, entweder auf INI verzichten oder sich direkt an die entsprechende WinAPI wenden. ![]() Ganz Perverse könnten jetzt auf eine TStringList ausweichen und alles selber parsen, aber ratet mal wo die TStringList herkommt? :roll: AssignFile, ReadLn und selber parsen ginge aber auch noch. :angle2: |
AW: Unit IniFiles bläht Programm auf
Also SysUtils habe ich sowieso bei mir im Programm drinne. Dann könnte es ja nur noch die Unit Classes sein die in IniFiles verwendet wird.
Die WinAPI ![]() |
AW: Unit IniFiles bläht Programm auf
Man kann eigentlich alles bis auf die Units Windows und Messages raus schmeissen. Den Rest den man noch so
braucht kann man zu grossen Teil aus Luckie's ![]() Da Spart man sich Arbeit. ;) Nutzt man dazu noch Delphi 6 für solche Späße spaart man noch 'n paar Bytes der Exe ein. |
AW: Unit IniFiles bläht Programm auf
Hab's nicht gross getestet, aber...
Delphi-Quellcode:
...ich poste es trotzdem.
unit UMiniIni;
interface uses Windows; type TMiniIni = class private FFilename : String; FMaxValueLength : Integer; public constructor Create(IniFilename : String; MaxValueLength : Integer = 255); procedure WriteString(Section, Key, Value : String); function ReadString(Section, Key, Default : String) : String; end; implementation { TMiniIni } constructor TMiniIni.Create(IniFilename: String; MaxValueLength : Integer = 255); begin FFilename := IniFilename; if (MaxValueLength > 32766) then FMaxValueLength := 32766 else if (MaxValueLength < 255) then FMaxValueLength := 255 else FMaxValueLength := MaxValueLength; end; function TMiniIni.ReadString(Section, Key, Default: String): String; var pResult : PChar; begin GetMem(pResult, FMaxValueLength); GetPrivateProfileString(PChar(Section), PChar(Key), PChar(Default), pResult, FMaxValueLength, PChar(FFileName)); Result := pResult; FreeMem(pResult, FMaxValueLength); end; procedure TMiniIni.WriteString(Section, Key, Value: String); var OutString : String; begin OutString := Copy(Value, 1, FMaxValueLength); WritePrivateProfileString(PChar(Section), PChar(Key), PChar(OutString), PChar(FFilename)); end; end. Wenn man Read/WritePrivateProfileString selbst importiert, spart man sich auch noch uses Windows. |
AW: Unit IniFiles bläht Programm auf
Die Unit Windows erzeugt fast keinen Overhead.
Sieh hat fast nichst / nichts Schlimmes/Großes in Initialization und Finalization stehen und sie bindet auch keine anderen großen Units ein, abgesehn von der Unit Types, welche aber noch kleiner ist. Da kann man sich also die eigenen Deklarationen ganz getrost ersparen. Wenn man schon anfängt auf Windows und Co. zu Verzichten, dann sollte man sowieso ganz auf jegliche Units verzichten und mit einer modifizierten System und SysInit arbeiten, dann kommt man selbst mit XE bestimmt noch auf unter 30 KB. :stupid: Dann noch auf Objekte verzichtet und alles rein Prozedual gelöst und schon wird die RTTI auch noch kleiner. |
AW: Unit IniFiles bläht Programm auf
OK, hatte da nicht groß nachgeschaut.
War sowieso ein Schnellschuß kurz vor Feierabend ;-) Größenbeschränkung beim Schreiben auch gleich noch vergessen (mal ganz "bequem" schnell eingebaut) |
AW: Unit IniFiles bläht Programm auf
Ich hatte vorher D6 im Einsatz und jetzt mit DXE auch einen enormen Anwuchs der EXE-Dateien festgestellt.
|
AW: Unit IniFiles bläht Programm auf
Hallo,
das liegt auch am erweiterten RTTI. Das kann man auch ausknippsen. Etwa so wie hier ![]() Übrigens werden neue Windows7-Dingens unterstützt. Wer glaubt, dass das ohne zusätzlichen Code geht ??? Heiko |
AW: Unit IniFiles bläht Programm auf
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz