| Autor |
Beitrag |
fuggaz
      
Beiträge: 106
|
Verfasst: 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)
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 Narses: Code- durch Delphi-Tags ersetzt
|
|
jfheins
      
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: 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
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 17.12.08 00:54
Was machst du denn mit einer ListBox?  Du hast doch gar kein Formular, da ist es doch Schwachsinn eine TListBox zu erzeugen, was hat das für einen Sinn?
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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 17.12.08 01:43
_________________ 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
      
Beiträge: 682
Mac OS X Snow Leopard
Xcode 3.1
|
Verfasst: 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  )
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
      
Beiträge: 193
Erhaltene Danke: 1
Win XP / Vischda
D6 PE / D2005 PE
|
Verfasst: Mi 17.12.08 04:56
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, 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...
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 17.12.08 08:12
_________________ Na denn, dann. Bis dann, denn.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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 
      
Beiträge: 106
|
Verfasst: 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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 18.12.08 20:42
BenBE hat folgendes geschrieben : | | 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
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.12.08 20:59
alzaimar hat folgendes geschrieben : | | 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. 
|
|
|