Problemi di memoria durante la pianificazione della fuga dall'inferno DLL in Delphi [chiuso]

3

Lavoro su un programma con circa 50 DLL caricate da un eseguibile, è un vecchio programma di coltivazione organica in cui l'unica motivazione per la creazione di una nuova DLL è quella in cui non esisteva in precedenza per soddisfare una determinata esigenza. (e gli spazi dei nomi non esistevano in Delphi quindi non ci è mai venuto in mente di fare dll1.main.pas, dll2.main.pas o qualcosa di ancora più unico)

Quello che vogliamo fare è consolidare tutte queste DLL in un unico eseguibile, dal momento che nessuno di questi viene utilizzato fuori dal programma, non ci dovrebbe essere molto di un problema. La preoccupazione che ha il mio capo è che se lo facessimo, il sovraccarico della memoria per i client del terminal server sarebbe passato attraverso il tetto.

Quindi, ho passato abbastanza codice di inizializzazione per sapere che molte cose vengono fatte ogni volta che una DLL viene caricata in memoria, ma diciamo che ho un progetto con circa 4000 file e 50 dll, 10 di che sono probabilmente utilizzati da qualsiasi utente in una qualsiasi sessione del programma. Le 50 DLL sono file di circa 2/3, se non di più, ma oltre a questo non vengono caricate molte altre risorse (solo alcune immagini, icone, cursori, ecc.). Se ho caricato tutti questi file in memoria, quanta memoria viene utilizzata per unità? quanto viene utilizzato per classe? Come posso mantenere il sovraccarico? e qual è il più grande progetto che ci si può ragionevolmente aspettare di costruire con Delphi?

Questo bocconcino non aiuta a rispondere, ma penso che potrebbe chiarire che cosa il mio capo è preoccupato, attualmente iniziamo il nostro programma a circa 18 meg, le normali condizioni di lavoro sono solitamente meno di 40 mega, pensa che potrebbe salire più in alto come 120 mega.

    
posta Peter Turner 11.09.2012 - 20:41
fonte

2 risposte

4

L'utilizzo della memoria non sarà un problema per te. Un paio delle mie app Delphi usano abitualmente un GB o più. Finché non corri nei limiti della piattaforma, starai bene. Non sono sicuro che le risorse stesse vengano caricate dal disco all'avvio dell'exe. Certamente sarebbero per le forme create automaticamente. Quindi vorrai evitarli e continuare a creare manualmente i moduli. E liberati anche loro.

Non penso che ci siano molte risposte concrete per te dal momento che dipenderà davvero da cosa è nella dll. La cosa migliore è compilare tutto in un singolo exe e vedere come appare. Un singolo exe sarebbe sicuramente più facile da gestire (e francamente, è uno dei punti di forza di Delphi). Il grosso problema è se sarebbe un problema eseguire un exe così grande su un server terminal, dato che dovresti avere più copie in esecuzione. In definitiva potrebbe essere più conveniente compilare un singolo exe e aggiungere un po 'di ram ai server terminal se necessario. Su un desktop normale non penso che sarebbe un problema.

    
risposta data 11.09.2012 - 21:33
fonte
-1

Finirai utilizzando meno risorse combinando tutto il codice in una singola immagine. Avrai un'istanza di RTL anziché 50.

    
risposta data 30.03.2013 - 06:52
fonte

Leggi altre domande sui tag