AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi bedarf des Arbeitsspeichers meiner Anwendung verringern
Thema durchsuchen
Ansicht
Themen-Optionen

bedarf des Arbeitsspeichers meiner Anwendung verringern

Ein Thema von gabneo · begonnen am 9. Mai 2007 · letzter Beitrag vom 12. Mai 2007
Antwort Antwort
Seite 2 von 2     12   
gabneo

Registriert seit: 15. Okt 2006
Ort: Deutsche Toskana :)
93 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

Re: bedarf des Arbeitsspeichers meiner Anwendung verringern

  Alt 10. Mai 2007, 05:23
Super,
danke dir für den Tip . Ich hatte Process-explorer auf meiner platte, aber reinschauen hat geholfen, na manchmal sieht man halt den wald vor lauter Bäumen nicht.
Ich konnte das Problem nun eingrenzen.
Das Problem ist, das die Komponenten die man verwendet dll´s beim starten der Kompilierten Exe mit in den Arbeitsspeicher reinladen. Dazu kommt die Liste an dll´s die einem von Windows aufgezwungen werden. In der Summe sieht das unter Vista dann so aus:

(RTSUltraMonHook.dll ist natürlich eine fremd-dll für einen systemhook von einer anderen Anwendung, äußerst interessant das windows meine applikation "zwingt" diese mitzuladen )

Delphi-Quellcode:
Process: meinscheduler.exe Pid: 3524 //bei meiner beispielanwendung

Name    Description   Company Name   Version

advapi32.dll   Erweiterte Windows 32 Base-API   Microsoft Corporation   6.00.6000.16386
aero.msstyles   Ressourcen-DLL für visuellen Stil "Windows-Aero"  Microsoft Corporation   6.00.6000.16386
clbcatq.dll   COM+ Configuration Catalog   Microsoft Corporation   2001.12.6930.16386
comctl32.dll   Bibliothek für Steuerelemente   Microsoft Corporation   5.82.6000.16386
comctl32.dll   Bibliothek für Steuerelemente   Microsoft Corporation   6.10.6000.16386
comctl32.dll.mui   Bibliothek für allgemeine Steuerelemente   Microsoft Corporation   5.82.6000.16386
gdi32.dll    GDI Client DLL   Microsoft Corporation   6.00.6000.16386
imm32.dll    Multi-User Windows IMM32 API Client DLL   Microsoft Corporation   6.00.6000.16386
kernel32.dll   Client-DLL für Windows NT-Basis-API   Microsoft Corporation   6.00.6000.16386
locale.nls         
locale.nls         
lpk.dll    Language Pack   Microsoft Corporation   6.00.6000.16386
msctf.dll    MSCTF-Server-DLL   Microsoft Corporation   6.00.6000.16386
msvcrt.dll   Windows NT CRT DLL   Microsoft Corporation   7.00.6000.16386
ntdll.dll    DLL für NT-Layer   Microsoft Corporation   6.00.6000.16386
ole32.dll    Microsoft OLE für Windows   Microsoft Corporation   6.00.6000.16386
oleaut32.dll   Microsoft Corporation   6.00.6000.16386
propsys.dll   Microsoft-Eigenschaftensystem   Microsoft Corporation   6.00.6000.16386
rpcrt4.dll   Remoteprozeduraufruf-Laufzeitumgebung   Microsoft Corporation   6.00.6000.16386
RTSUltraMonHook.dll   Hook DLL for Realtime Soft UltraMon   Realtime Soft   2.07.0001.0000
RTSUltraMonHookRes.dll   UltraMon Resource DLL   Realtime Soft   2.06.0023.0003
secur32.dll   Security Support Provider Interface   Microsoft Corporation   6.00.6000.16386
setupapi.dll   Windows Setup-API   Microsoft Corporation   6.00.6000.16386
shell32.dll   Allgemeine Windows-Shell-DLL   Microsoft Corporation   6.00.6000.16386
shlwapi.dll   Shell Light-weight-Dienstprogrammbibliothek   Microsoft Corporation   6.00.6000.16386
meinscheduler.exe   
user32.dll   Multi-User Windows USER API Client DLL   Microsoft Corporation   6.00.6000.16438
user32.dll.mui   Multi-User Windows USER API Client DLL   Microsoft Corporation   6.00.6000.16386
userenv.dll   Userenv   Microsoft Corporation   6.00.6000.16386
usp10.dll    Uniscribe Unicode script processor   Microsoft Corporation   1.626.6000.16386
uxtheme.dll   Microsoft UxTheme-Bibliothek   Microsoft Corporation   6.00.6000.16386
version.dll   Version Checking and File Installation Libraries   Microsoft Corporation   6.00.6000.16386
Die meisten Anwendungen benutzen hier schon alleine doppelt so viele dll´s wie mein "scheduler", also schon mal ein grund zur Freude!

Allerdings kann ich die Anzahl der geladenen dll´s durch Hardcore freigabe ala

Delphi-Quellcode:
Quelle: [url]http://www.swissdelphicenter.ch/torry/showcode.php?id=1202[/url]

...remove a Dll from memory?
Author: Michael Wiren

function KillDll(aDllName: string): Boolean;
var
  hDLL: THandle;
  aName: array[0..10] of char;
  FoundDLL: Boolean;
begin
  StrPCopy(aName, aDllName);
  FoundDLL := False;
  repeat
    hDLL := GetModuleHandle(aName);
    if hDLL = 0 then
      Break;
    FoundDLL := True;
    FreeLibrary(hDLL);
  until False;
  if FoundDLL then
    MessageDlg('Success!', mtInformation, [mbOK], 0)
  else
    MessageDlg('DLL not found!', mtInformation, [mbOK], 0);
end;
nicht reduzieren. Übrigens hatte das killen der dll, nur auswirkungen auf meine Applikation, was beweist das die geladenen dll´s extra zu meiner runtime exe zugeladen werden.
Diese wurde nach dem killen einiger dll´s ziemlich klein.
Also wird die Lösung des Dilemma´s wohl darin liegen, das ich Windows per API dazu bringe, den wie du sagtest MEM_COMMIT zu freen. So in etwa, wie das diese ganzen Arbeitsspeicher-freiräum tools machen, nur halt für eine=meine Anwendung.
Wie das genau gehen soll, weiß ich noch nicht, den um eine saubere Lösung hinzukriegen gilt es bei solchen sachen immer viel abzuwägen.

Was hältst/haltet du/ihr von dieser beweiskette?

Übrigens Vielen Dank für die Hilfe!
greez
gabneo
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: bedarf des Arbeitsspeichers meiner Anwendung verringern

  Alt 10. Mai 2007, 07:35
Zitat von gabneo:
@all
Daher die Frage, warum ist eine Anwendung wie Ultramon und viele weitere Anwendungen so klein(?), wenn nichts was ich meines wissens beeinflussen kann, die größe im Arbeitsspeicher verringert?

Auf irgendwas verzichten die, was ich drin habe...
Die Antworten stehen schon längst in den Beiträgen weiter oben. Wieso liest Du die nicht einfach? Bei uns läuft ein Telnetserver mit 56kb Größe, der hat ein Hauptfenster und Menüs. Der Typ, der das programmiert hat, hat keine Ahnung von VCL, aber von der Win API.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
gabneo

Registriert seit: 15. Okt 2006
Ort: Deutsche Toskana :)
93 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#13

Re: bedarf des Arbeitsspeichers meiner Anwendung verringern

  Alt 10. Mai 2007, 07:48
Einfach, weil ich mich mit der API einfach nicht so gut auskenne, als das ich komplett auf die Delphi Komponenten Verzichten möchte.
Da sag ich doch: "Lieber den spatz in der hand, als die Taube auf dem dach."

greez
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: bedarf des Arbeitsspeichers meiner Anwendung verringern

  Alt 10. Mai 2007, 08:00
Dann lerne es doch, schau Dir Tutorials an und fang einfach an. Wenn Du etwas erreichen willst, dann musst du auch was dafür tun.

Mit VCL geht es eben nicht. Punkt.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
gabneo

Registriert seit: 15. Okt 2006
Ort: Deutsche Toskana :)
93 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#15

Re: bedarf des Arbeitsspeichers meiner Anwendung verringern

  Alt 10. Mai 2007, 09:18
Ok,
vielen dank. Mir geht es immer noch um die Größe im Arbeitsspeicher und die lässt sich in meinem derzeitigen Exe-Status dadurch reduzieren indem ich dll´s freigebe!
Und nicht durch WinAPI tutorials. Sorry aber was ich da oben schreibe macht sinn, und ich bin ganz und gar nicht zu faul um was zu lernen. Mag sein das das zuviel text ist ums durchzulesen, aber da steht alles drin und das thema hat länger nix mehr mit VCL etc. zu tun, da ich Funktionen aus der VCL benutze die nur mit einem sehr großen aufwand sich durch eine reine WinAPI version ersetzen lassen.
Wer hat schon lust etwas was fertig ist und funktioniert in 1 1/2 Wochen (oder was weiß ich) neuzubauen = das rad neu erfinden?

Also...bitte lass mich einfach meine dll frage stellen denn mit

Zitat von alzaimar:
Dann lerne es doch, schau Dir Tutorials an und fang einfach an. Wenn Du etwas erreichen willst, dann musst du auch was dafür tun.

Mit VCL geht es eben nicht. Punkt.
ist mir leider nicht wirklich geholfen, da man sich eine heidenarbeit aufhalst die Funktionen in WinAPI zu schreiben.

greez
gabneo

PS: Ich will damit nicht schnippisch oder sonstwie klingen. Also nix für ungut!
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#16

Re: bedarf des Arbeitsspeichers meiner Anwendung verringern

  Alt 10. Mai 2007, 09:20
Die VCL verwendet er ja auch nicht (edit: hat er ja inzwischen auch geschrieben)

Das "Problem" mit dem Entladen dieser DLLs ist: die brauchst Du ja! Zumindest wahrscheinlich zu großen Teilen. Weißt es nur noch nicht Die RTL von Delphi benutzt halt diverse Funktionen aus diesen DLLs. Wenn Du einfach hingehst und einige DLLs entlädst, weißt Du nie, welche Funktionen gerade zufällig davon abhängen... besser also, dafür zu sorgen, daß sie von vorneherein gar nicht erst geladen werden!

Z.B.sehe ich da comctl32.dll und gdi32.dll ... das deutet darauf hin, daß irgendwo noch eine Unit eingebunden ist, die doch noch etwas grafisches veranstalten will. Das kann irgendwo Code sein, der rein theoretisch noch ein MessageBox aufrufen könnte z.B., oder irgend eine indirekt damit zusammenhängende Unit.

Ich etwa hab gerade noch einmal in einigen meiner Kommandozeilenprogramme nachgeschaut: einmal MessageBox plus AppEvents für irgendne Konstante eingebunden ergibt stolze 300 KB mehr (und hat auch den statischen Import jener DLLs bewirkt).

Aber nochmal vorsichtshalber: die DLLs entladen ist relativ heikel und hat eher zweifelhafte Erfolge... nutze sie besser als Indiz dafür, wo noch unnötiger Code mit einkompiliert wird. Als Anleitung dafür etwa kannst Du auch ein Programm nehmen, daß anzeigt, welche Funktionen aus diesen DLLs importiert werden (wenns der ProcessExplorer nicht macht, dann z.B. der FileAlyzer). Und wenn Du dann die völlig unnötige Funktion ImageList_Add aus comctl32.dll importiert siehst, suchst Du mal die RTL/VCL-Unit, die diese Funktion importiert, versuchst herauszufinden über welche Umwege diese auch in Dein Projekt eingebunden ist und ob Du diese Abhängigkeit nicht lösen kannst (zwar "kostet" der Import selber nichts, aber diese Unit kann halt jede Menge unnötigen Code mitkompilieren).
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#17

Re: bedarf des Arbeitsspeichers meiner Anwendung verringern

  Alt 10. Mai 2007, 09:52
Zitat von CCRDude:
Die VCL verwendet er ja auch nicht
Aber wenn die ComCtrls doch mit gelinkt werden?

Und überhaupt VCL/RTL/SAT 1 wo ist da der Unterschied?

Zitat von CCRDude:
(edit: hat er ja inzwischen auch geschrieben)
Wer lesen kann ist klar im Vorteil? Eine Unsitte von mir....

Ich würde einfach mal die Uses-Liste komplett wegstreichen (außer die die eigenen Units) und dann schauen, wo es klemmt.
IntToStr etc. lassen sich sehr einfach selbst programmieren (wenn's denn daran liegt).

Wenn Du die VCL/RTL Sourcen hast, dann kannst Du das Projekt ja mal mit dem Suchpfad kompilieren und per F7 durchsteppen. Anfangs werden ja alle eingebundenen Units initialisiert. Dann siehst du auch, was so alles dazugepackt wird...

Wie gesagt: Möglichkeiten gibts Viele..
Zitat von gabneo:
Wer hat schon lust etwas was fertig ist und funktioniert in 1 1/2 Wochen (oder was weiß ich) neuzubauen = das rad neu erfinden?
Ich. Wenn ich etwas optimieren will. Was sind schon 10 Tage? Außerdem erfindet man nicht das Rad neu, sondern lernt was dazu.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
gabneo

Registriert seit: 15. Okt 2006
Ort: Deutsche Toskana :)
93 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#18

Re: bedarf des Arbeitsspeichers meiner Anwendung verringern

  Alt 12. Mai 2007, 23:51
Vielen Dank euch beiden.
Der Filealyzer hats gebracht. Bisher konnte mir kein tool wirklich zeigen, was ich mitcompiliert habe. Doch nun kann ich eindeutig die genutzten DLL´s und die daraus genutzten Funktionen sehen, aus denen ich nur 1-2 Funktionen brauche. Jetzt weiß ich wo ich hinlangen muss.
also thema erledigt.
thx + greez
gabneo

  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 03:15 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