Autor Beitrag
fuggaz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 106



BeitragVerfasst: Mi 17.12.08 00:31 
Hey,

Kann ich folgenden Code mit Delphi-Befehlen optimieren, damit die Exe-Datei kleiner wird?
Trotz des kurzen Quelltextes ist das Programm 380kb groß-finde ich zuviel.
(Es ist der Projekt-Quelltext)
ausblenden Delphi-Quelltext
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:
program pSort;

uses
  SysUtils, Forms, Dialogs, StdCtrls;

{$R *.res}

var OpenDialog:TOpenDialog;
    Liste:TListBox;
begin
ForceCurrentDirectory:=true;
OpenDialog:=TOpenDialog.Create(Application.Owner);
OpenDialog.Options:=[ofHidereadonly,ofFileMustExist,ofPathMustExist,ofDontAddToRecent];
if OpenDialog.Execute then
  begin
  Liste:=TListBox.Create(Application.Owner);
  Liste.ParentWindow:=Application.Handle;
  Liste.Sorted:=false;
  Liste.Items.LoadFromFile(OpenDialog.FileName);
  Liste.Items.Delete(0);
  Liste.Sorted:=true;
  Liste.Items.Insert(0,'[Blocksite]');
  Liste.Items.SaveToFile(OpenDialog.FileName);
  Liste.Free;
  end;
OpenDialog.Free;
end.


Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mi 17.12.08 00:51 
Du könntest die Einträge manuell sortieren, dann benötigst du die >Unit Forms nicht, das spart viel ;)

Das nächste wäre dann, auf den Opendialog zu verzichten. (Ich glaube, Dialogs bindet wiederum Forms ein ...)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 17.12.08 00:54 
Was machst du denn mit einer ListBox? :shock: Du hast doch gar kein Formular, da ist es doch Schwachsinn eine TListBox zu erzeugen, was hat das für einen Sinn? :gruebel:

Durch den Dialog und das wird die Exe groß. Lass die TListBox weg, die Funktionalität, die du benutzt, steckt ohnehin in TStringList auch drin, nimm einfach das, und ersetze den VCL-Dialog durch den API-Dialog:
msdn.microsoft.com/e...ibrary/ms646927.aspx
www.scalabium.com/faq/dct0156.htm

Dann kannst du auf die Units Dialogs und Forms verzichten.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 17.12.08 01:23 
Ferner fällt ohne die TListbox die Unit StdCtrls weg. Für die TStringList brauch man zwar die Classes, die ist aber vergleichsweise klein.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 17.12.08 01:38 
Und bitte verwende Resourcenschutzblöcke. Hat zwar gar nichts mit deiner Frage zu tun, aber sowas tut schon fast in den Augen weh ;)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 17.12.08 01:43 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
[...] aber sowas tut schon fast in den Augen weh ;)

Nicht nur fast! Das ist schon regelrechte Folter ;-) :mrgreen:

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Mi 17.12.08 02:05 
Resourcenschutzblöcke sind doch nur was für Schwächlinge! Lachend in die Klinge reinlaufen rulez! (wer Ironie findet, darf es gerne behalten; man kann eh nie genug davon haben :wink: )

Viel schlimmer finde ich die, auch schon angesprochene, Verwendung von VCL-Elementen, wo überhaupt keine nötig sind. Das V in VCL steht für Visuell, Du benötigst aber keine visuell darstellenden Elemente.

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Mi 17.12.08 04:56 
ausblenden volle Höhe Delphi-Quelltext
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:
program pSort;

uses
  Windows,
  Classes,  // für TStringList notwendig
  nonVCLOpenFileDlg in 'nonVCLOpenFileDlg.pas';

const
  AppName = 'pSort';

var
  Liste: TStringList;
  FileName: String;

begin
  FileName := OpenFileDialog(0'');

  if FileName <> '' then
  begin
    Liste := TStringList.Create;
    try
      Liste.Sorted := false;
      Liste.LoadFromFile(FileName);
      Liste.Delete(0);
      Liste.Sorted := true;
      Liste.Insert(0'[Blocksite]');
      Liste.SaveToFile(FileName);
    finally
      Liste.Free;
    end;
  end else
    MessageBox(0'Es wurde keine Datei geöffnet.',
      AppName, MB_ICONINFORMATION or MB_OK);
end.


Geht auch noch kleiner wenn man sich selbst eine non VCL Classe für TStringList baut. So sind es ~ 150 KByte.
Einloggen, um Attachments anzusehen!
_________________
Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus... :P
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 17.12.08 08:12 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
[...] aber sowas tut schon fast in den Augen weh ;)

Nicht nur fast! Das ist schon regelrechte Folter ;-) :mrgreen:

Was passiert eigentlich mit den ganzen Handles und Speicherbereichen, wenn das Programm einfach terminiert?

_________________
Na denn, dann. Bis dann, denn.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 17.12.08 14:46 
Werden im Idealfall freigegeben; kann aber sein, dass schlecht programmierte Treiber das nicht mitbekommen und die Ressourcen damit noch reserviert bleiben.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
fuggaz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 106



BeitragVerfasst: Mi 17.12.08 23:15 
danke schonmal für die konstruktiven und bewertenden Antworten ;-)^^

Ich werde mich ab Freitag daran begeben mir das mal alles genauer anzuschauen.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Do 18.12.08 20:42 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Werden im Idealfall freigegeben; kann aber sein, dass schlecht programmierte Treiber das nicht mitbekommen und die Ressourcen damit noch reserviert bleiben.

Treiber in Delphi? Ich dachte, das geht nicht. Oder meinst Du, Handles *VON* schlecht programmierten Treibern? Oha.

_________________
Na denn, dann. Bis dann, denn.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 18.12.08 20:59 
user profile iconalzaimar hat folgendes geschrieben Zum zitierten Posting springen:
Treiber in Delphi? Ich dachte, das geht nicht. Oder meinst Du, Handles *VON* schlecht programmierten Treibern? Oha.
Das meinte er vermutlich, aber man kann rein theoretisch auch in Delphi Treiber schreiben, da gabs das Delphi Driver Development Kit z.B.: w-shadow.com/blog/20...g-drivers-in-delphi/
Aber die Entwickler haben es wohl mittlerweile eingesehen, dass es sich nicht lohnt es weiterzuentwicklen. Wer würde schon ernsthaft Delphi dafür nehmen wollen, bzw. aus welchem Grund. ;-) Aber man kann theoretisch. :mrgreen: