posts - 506, comments - 1705, trackbacks - 139

Gli spreconi di handle e desktop heap: Google e Microsoft fanno la guerra a chi fa peggio

Per riprendere il discorso che facevo qui, ecco gli spreconi di handle in carne ed ossa...

Parto biasimando Outlook 2007 che nel mio caso utilizza ben 4000 handle senza alcun extra plugin installato e collegato ad Exchange con "sole" 6 caselle di posta.

I danni però vengono con il plugin di Google Desktop per Outlook che ne consuma 6000! Portando il totale al massimo dei 10000, impedendo al sottoscritto di aprire più di due messaggi, creare cartelle, etc. L'errore risultante è "Cannot create the folder. Your server administrator has limited the number of items you can open simultaneously ...."
Ma dico io, che se ne fa di tutti questi handle? Puzza tanto di leak ... 

Sempre Google desktop è esoso anche nel numero di processi aperti (quattro) e di conseguenza nella quantità di memoria consumata. Microsoft in passato con tanta fatica ha accorpato all'interno di un processo una certa quantità di servizi proprio per contenere il consumo di memoria e poi mi ritrovo con GD che te ne spara 4 in una botta ... mah.

Ma anche Live non è da meno! La toolbar per IE di Live è estremamente esosa di RAM. IE7 con Live Toolbar occupa 32844K di working set mentre senza arrivo a 18864K. Questo significa che la Toolbar prende la bellezza di circa 14MB per ogni istanza del browser. (Queste non le ho fatte con l'ultima versione, spero proprio che nel frattempo siano migliorate un pochino).

Se poi guardiamo ai processi di indexing anche Live ne spande diversi e quel che è peggio arrivano sul mio PC a portarsi via la bellezza di 1GB di RAM. Al suono dello swap su hard disk ho dato il via alla rimozione di Live.

In compenso Live è meno esoso come handle e il plugin di Outlook non lo fa esplodere.

Passiamo poi ad IE7 che ad ogni istanza si porta via la bellezza di 64K di desktop heap contro Firefox che invece ne prende 12K. Qualcosa in più ad IE7 è dovuto, a causa del prezioso sandboxing dei plugin e alle altre belle feature di sicurezza. Ma certamente c'è qualcosa di troppo per i miei gusti, considerato che 3MB è il massimo di default per ogni desktop.

Alla fine dei conti queste sono solo lezioni per chi sviluppa e credo che si possa e si debba imparare anche da questo:

  • Per le ricerche su disco, sono tornato al mio amato findstr da command prompt. Semplice, efficiente, veloce e poco esoso. Non sono un aficionado delle tecnologie vintage e se ci sarà mai un buon prodotto di search, sarò ben lieto di usarlo.
  • Per le ricerche sulla posta, torno ad usare il vecchio Lookout con tutti i suoi difettucci ma comunque pregevole per la velocità e la compattezza in memoria.
  • Come sviluppatore ri-ri-riprometto di guardare più spesso a cosa combinano le mie applicazioni in termini di handle kernel, user e gdi.
  • Come implementazione umana di "F1" (help per clienti, amici e parenti) dovrò prendere in seria considerazione che Una causa frequente di malfunzionamento del PC sarà l'esaurimento del desktop heap. L'utente medio sfonderà presto con estrema facilità il desktop heap su XP grazie a un manipolo di sviluppatori veramente troppo poco attenti. Speriamo di non essere tra questi

Per i maniaci di finestre aperte potete aumentare il desktop heap come ho fatto io (vedi altro post) e ora riesco nuovamente ad aprire le mie decine di finestre senza problemi.

E con tutto ciò mi tengo stretto IE7 perché la sicurezza viene prima di tutto. Con tutto ciò se c'è qualcosa da lamentarmi sono il primo e l'ho già fatto a chi di dovere ... i miei 2 cents li ho spesi.

Print | posted on domenica 14 gennaio 2007 22.41 |

Feedback

Gravatar

# re: Gli spreconi di handle e desktop heap: Google e Microsoft fanno la guerra a chi fa peggio

+quoto Raf! Non avrei mai potuto fare una relazione così dettagliata. Come sai ho già provato a fare qualche timido post parlando dell'eccessivo consumo di memoria per vedere se qualcuno di MS mi diceva qualcosa... ma a volte da questo punto di vista mi sembrano un pò sordi... perchè si sa che al consumer classico non tecnico non interessa la cosa e al più si compra una macchina più potente :( ... la guerra commerciale del tool più bello/figo porta alla deriva tecnico/ingegneristica... bah :/
15/01/2007 0.06 | M.rkino
Gravatar

# re: Gli spreconi di handle e desktop heap: Google e Microsoft fanno la guerra a chi fa peggio

non posso che approvare, il mio outlook 2002 (si lo so dovrei cambiarlo :P) si ciuccia 800 handle e praticamente non fa altro che scaricare posta in locale da 5 cartelle e non mantiene nessuna connessione aperta e non uso nessun plugin :(.

Alk.
15/01/2007 10.32 | Gian Maria
Gravatar

# re: Gli spreconi di handle e desktop heap: Google e Microsoft fanno la guerra a chi fa peggio

Ciao Raf,

posso farti una domanda? Come si fa a controllare quanti handle consuma un processo/applicazione?

Grazie,
Giulio
15/01/2007 12.49 | Giulio
Gravatar

# re: Gli spreconi di handle e desktop heap: Google e Microsoft fanno la guerra a chi fa peggio

Con il desktop heap monitor che ho omesso nel link perché è un tool rognosetto anche se nulla di spaziale:
http://www.microsoft.com/downloads/details.aspx?familyid=5CFC9B74-97AA-4510-B4B9-B2DC98C8ED8B&displaylang=en

Ciao!
15/01/2007 12.58 | Raffaele Rialdi
Gravatar

# re: Gli spreconi di handle e desktop heap: Google e Microsoft fanno la guerra a chi fa peggio

Ciao Raf,

sto ragionando parecchio su queste tue riflessioni per un progetto che sto implementando, quindi ti giro un domandone, così almeno sento il parere di uno che ne sa più di me.

In pratica ho un PresentationLayer (che implementa /de facto/ un editor visuale per diagrammi a blocchi... beh, non è proprio così ma *molto* simile), e sotto una BL in cui risiede il mio Object-Model che implementa la logica del diagramma. Devo implementare un meccanismo di Undo/Redo (ARGH!). Ho pensato ad un sistema del genere:

PL --> un Proxy dell'ObjectModel (Proxy) --> ObjectModel (OM)

ogni volta che l'utente esegue una modifica il Proxy:
- esegue la modifica sull'OM
- registra un therad che esegue la stessa modifica in uno stack (Redo)
- registra un thread che esegue l'operazione inversa in un altro stack (Undo)
Ogni record di questi stack saranno in wait su alcuni eventi. Se il mio CTRL+Z ha profondità 50 passi, questi eventi saranno 50 e, se non erro, ad ognuno di questi corrisponde un handle di sistema (come pure ad ogni thread, giusto?). Mi chiedo: può essere una soluzione valida? E soprattutto: come faccio a rilasciare *esplicitamente* questi handle?

Grazie,
Giulio
26/01/2007 12.53 | Giulio
Gravatar

# re: Gli spreconi di handle e desktop heap: Google e Microsoft fanno la guerra a chi fa peggio

Ciao Giulio,
credo che dovresti invece lavorare sullo stato dell'object model lasciando perdere thread e affini. Mi spiego ...
Ogni volta che l'utente compie una o più azioni che comportano un cambio di stato significativo, cloni lo stato degli oggetti del BL e li referenzi in uno stack (undo).

Quando vuoi fare l'undo non fai altro che:
- clonare lo stato attuale e metterlo nel secondo stack (redo)
- prendere lo stato dallo stack undo e ripristinarlo nello stato attuale
Il redo lo fai invertendo i due stack

La gestione dello stato dei tuoi oggetti non tocca thread, UI e affini, quindi niente handle.
Mi sono perso qualcosa o ti basta questo?
(la prox volta posta sui ng ;-) )
26/01/2007 17.17 | Raffaele Rialdi
Gravatar

# re: Gli spreconi di handle e desktop heap: Google e Microsoft fanno la guerra a chi fa peggio

Ciao Raf,

noto con piacere che è la stessa metodologia che seguo attualmente! That's cool!
Per quanto riguarda il postare sul ng: di norma lo faccio sempre, ma sono stato "attratto" dal subject del post.

Ciao,
Giulio
29/01/2007 10.14 | Giulio

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 8 and 4 and type the answer here:

Powered by: