Prevenire le System.OutOfMemoryException

by Marco 14. maggio 2009 12.32

Nell'ultimo progetto che ho sviluppato che comprendeva la creazione di un AppDomain per il caricamento "on the fly" di Assembly da un database e la notifica ai client dello stato delle operazioni attraverso una callback di WCF sono incappato in una problematica documentata del funzionamento del GC (documentazione http://msdn.microsoft.com/en-us/magazine/cc163491.aspx , problema legato alla frammentazione e alle chiamate remote, paragrafo "Unneeded rooted reference" ) che in certi casi particolari mandava il mio servizio in "out of memory".

Dopo aver verificato questo comportamento attraverso il CLR Profiler e non potendo riscrivere completamente quella parte ho cercato un modo per poter controllare il caso in cui l'operazione che avrei dovuto eseguire sarebbe andata in "out of memory" per poterla prevenire. Dopo alcune ricerche ho trovato la classe che faceva al caso mio. La classe in questione è la System.Runtime.MemoryFailPoint .
Questa classe permette di capire se sono disponibili n Mb di ram, in caso negativo verrà sollevata una eccezione di tipo System.InsufficientMemoryException che potremmo gestire magari liberando la memoria in qualche modo.
L'utilizzo della classe è molto semplice basta instanziarla e passare al costruttore i Mb che sono richiesti.

Attraverso l'utilizzo della classe sopracitata sono così riuscito a gestire il problema testando a runtime lo stato della memoria e "reciclando" l'appDomain ho così controllato il consumo evitando la System.OutOfMemoryException.

Correntemente valutato 3.0 da 5 utenti

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

.Net

“Axum” e il parallelismo implicito

by Marco 11. maggio 2009 16.13

Dai laboratori di ricerca di Microsoft è nato il progetto “Axum”, un’idea ambiziosa e molto interessante nata con lo scopo di permettere a noi sviluppatori di scrivere codice lasciando che il runtime possa “capire” e parallelizzare in modo autonomo l’esecuzione dello stesso, attraverso un linguaggio che si basa sull'architettura Web e sul principio dell'isolamento(fondamentale nella programmazione parallela).

Vi consiglio di dare un’occhiata al video che trovate nella pagina principale di presentazione del progetto al link http://msdn.microsoft.com/en-us/devlabs/dd795202.aspx

Credo che il “parallelismo implicito” sia l’unico modo per permettere a tutti di sfruttare veramente la potenza che i multicore ci mettono a disposizione senza dover leggere troppi libri :-)

Vota questo post per primo

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

Multithreading | Parallel Programming

Disclaimer
Le opinioni espresse in questo blog sono mie opinioni personali.

© Copyright 2012 Knowledge.CreateAsync()