AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unit IniFiles bläht Programm auf

Ein Thema von ringli · begonnen am 11. Mai 2011 · letzter Beitrag vom 11. Mai 2011
Antwort Antwort
ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#1

Unit IniFiles bläht Programm auf

  Alt 11. Mai 2011, 14:59
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ß.

Geändert von ringli (11. Mai 2011 um 15:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.155 Beiträge
 
Delphi 12 Athens
 
#2

AW: Unit IniFiles bläht Programm auf

  Alt 11. Mai 2011, 15:05
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

Tja, entweder auf INI verzichten oder sich direkt an die entsprechende WinAPI wenden.
MSDN-Library durchsuchenWritePrivateProfileString

Ganz Perverse könnten jetzt auf eine TStringList ausweichen und alles selber parsen, aber ratet mal wo die TStringList herkommt?
AssignFile, ReadLn und selber parsen ginge aber auch noch.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (11. Mai 2011 um 15:09 Uhr)
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Unit IniFiles bläht Programm auf

  Alt 11. Mai 2011, 15:12
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 MSDN-Library durchsuchenGetPrivateProfileString verwende ich ja jetzt da ich mir ja nur die benötigten Funktionen aus der Unit IniFiles kopiert habe und in diesem Fall nur die Funktion zum Lesen der Ini-Datei benötige.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

AW: Unit IniFiles bläht Programm auf

  Alt 11. Mai 2011, 15:40
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 "Sammlung" (beispielsweise die MpuTools.pas) beziehen.
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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Unit IniFiles bläht Programm auf

  Alt 11. Mai 2011, 16:00
Hab's nicht gross getestet, aber...
Delphi-Quellcode:
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.
...ich poste es trotzdem.

Wenn man Read/WritePrivateProfileString selbst importiert, spart man sich auch noch uses Windows.

Geändert von Satty67 (11. Mai 2011 um 16:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.155 Beiträge
 
Delphi 12 Athens
 
#6

AW: Unit IniFiles bläht Programm auf

  Alt 11. Mai 2011, 16:46
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.
Dann noch auf Objekte verzichtet und alles rein Prozedual gelöst und schon wird die RTTI auch noch kleiner.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (11. Mai 2011 um 16:50 Uhr)
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Unit IniFiles bläht Programm auf

  Alt 11. Mai 2011, 16:59
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)
  Mit Zitat antworten Zitat
Benutzerbild von rainerg
rainerg

Registriert seit: 5. Aug 2002
Ort: Hannover
82 Beiträge
 
Delphi XE Starter
 
#8

AW: Unit IniFiles bläht Programm auf

  Alt 11. Mai 2011, 17:11
Ich hatte vorher D6 im Einsatz und jetzt mit DXE auch einen enormen Anwuchs der EXE-Dateien festgestellt.
Rainer G. aus H.
www.BunteReisebilder.de
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Unit IniFiles bläht Programm auf

  Alt 11. Mai 2011, 20:30
Hallo,

das liegt auch am erweiterten RTTI.
Das kann man auch ausknippsen.

Etwa so wie hier

http://docwiki.embarcadero.com/RADSt...e_%28Delphi%29

Übrigens werden neue Windows7-Dingens unterstützt.
Wer glaubt, dass das ohne zusätzlichen Code geht ???


Heiko
Heiko

Geändert von hoika (11. Mai 2011 um 20:38 Uhr)
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Unit IniFiles bläht Programm auf

  Alt 11. Mai 2011, 21:05
Wer glaubt, dass das ohne zusätzlichen Code geht ???
Deswegen habe ich ja das hier geschrieben:
Mir ist schon klar das die unter Delphi XE kompilierten Programme standardmäßig größer geworden sind, ...
Aber der Tip mit der WEAKLINKRTTI-Compilerdirektive war gut. Ich habe das mal bei 2 anderen Programmen probiert und prompt waren die Dateien um ~70kB kleiner.

Geändert von ringli (11. Mai 2011 um 21:09 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz