Come identificare la memoria delle perdite in common language runtime

Traduzione articoli Traduzione articoli
Identificativo articolo: 318263 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo vengono illustrate le perdite di memoria sono e sono elencate alcune cause possibili perdite di memoria. Questo articolo viene inoltre spiegato la perdita di memoria percepita e come Ŕ possibile essere erroneamente interpretata come una perdita di memoria true.

Informazioni

Perdite di memoria possono causare l'esecuzione di esaurimento delle risorse di un'applicazione e possono causare l'arresto anomalo di un'applicazione. ╚ importante identificare perdite di memoria. Il problema di memoria Ŕ tormentato gli sviluppatori in C e c ++ per anni. In Microsoft Visual Studio 2005 o in Microsoft Visual Studio. NET, un pacchetto di insieme di garbage completa e la memoria gestita Ŕ possibile evitare perdite di memoria, ma in alcuni casi, un programma sembra di perdite di memoria.

Definizione di perdita di memoria

Perdita di memoria quando memoria viene allocata in un programma e non viene mai restituito al sistema operativo, anche se il programma non utilizza pi¨ la quantitÓ di memoria. Di seguito sono quattro tipi principali di perdite di memoria:
  • In un ambiente di memoria gestita manualmente: memoria in modo dinamico Ŕ allocato e a cui fa riferimento un puntatore. Il puntatore verrÓ cancellato prima che la memoria viene liberata. Dopo il puntatore viene cancellato, la memoria non Ŕ possibile accedere e pertanto non pu˛ essere liberata.
  • In un ambiente di memoria gestita in modo dinamico: memoria viene eliminato ma non raccolti, perchÚ un riferimento all'oggetto Ŕ ancora attivo. PoichÚ un riferimento all'oggetto Ŕ ancora attivo, il garbage collector raccoglie non che la memoria. Questo problema pu˛ verificarsi con un riferimento impostato dal sistema o il programma.
  • In un ambiente di memoria gestita in modo dinamico: il garbage collector pu˛ raccogliere e disponibile la memoria ma mai lo restituisce al sistema operativo. Questo problema si verifica quando il garbage collector non pu˛ spostare gli oggetti che sono ancora in utilizzare per una parte della memoria e libero il resto.
  • In qualsiasi ambiente di memoria: memoria insufficiente pu˛ causare la gestione quando molti oggetti di grandi dimensioni vengono dichiarati e non Ŕ consentiti lasciare l'ambito. Di conseguenza, memoria viene utilizzato e mai liberata.

Discussione

A causa del pacchetto insieme garbage che viene implementato in Microsoft .NET Framework, non Ŕ possibile disporre di una perdita di memoria nel codice gestito. Ne consegue che due domande: come quindi pu˛ verificarsi una perdita di memoria? PerchÚ viene visualizzato di disporre di una perdita di memoria?

Quando si utilizza codice non gestito come parte dell'applicazione, una perdita di memoria pu˛ verificarsi in un'applicazione .NET Framework. Questo codice non gestito Ŕ una perdita di memoria e .NET Framework runtime non pu˛ risolvere questo problema.

Inoltre, un progetto potrebbe essere visualizzato solo una perdita di memoria. Questa condizione pu˛ verificarsi se molti oggetti di grandi dimensioni (ad esempio oggetti DataTable ) sono dichiarati e quindi aggiunto a un insieme (ad esempio un DataSet ). Le risorse che possiedono questi oggetti non possono essere rilasciate e le risorse rimangono attive per l'intero eseguite del programma. Sembra trattarsi di una perdita, ma effettivamente Ŕ solo un sintomo di quella di memoria allocata nel programma.

Ad esempio, Ŕ necessario un DataSet . Ogni volta che viene eseguita una nuova query, si aggiunge un nuovo elemento di DataTable a tale DataSet per contenere i dati che viene restituiti. Se non esistono grandi quantitÓ di dati che non di cessione di, i dati rimane attivi fino a quando il DataSet Ŕ ancora in uso. In questo caso, numero di volte sufficiente, Ŕ possibile esaurimento della memoria. Non si tratta di una perdita di memoria, ma invece Ŕ un problema di gestione della memoria. Vedere il seguente codice di esempio:
  Dim DS As DataSet
  Dim cn As New SqlClient.SqlConnection("data source=localhost;initial catalog=Northwind;integrated security=SSPI")
  cn.Open()
 
  Dim da As New SqlClient.SqlDataAdapter("Select * from Employees", cn)
  Dim i As Integer
  DS = New DataSet()

  For i = 0 To 1000
      da.Fill(DS, "Table" + i.ToString)
  Next
				
Nota questo esempio Ŕ solo un frammento di codice. Nell'esempio si presuppone che Microsoft SQL Server sia installato nel computer locale e che l'utente che esegue il codice disponga di accesso al database Northwind incluso in SQL Server.

Anche se questo codice Ŕ ovviamente inefficiente e poco pratica, Ŕ destinato a dimostrare che se gli oggetti vengono aggiunti a un insieme (ad esempio aggiungere le tabelle DataSet insieme), gli oggetti vengono tenuti attivi, purchÚ l'insieme rimane attivo. Se un insieme viene dichiarato a livello globale del programma e dichiarati nel programma e aggiunta a, che insieme, questo significa che anche se gli oggetti non sono nell'ambito degli oggetti, gli oggetti rimangono attivi perchÚ sono ancora riferimento.

Ogni volta che in questo caso, la quantitÓ di memoria che il programma utilizza aumenta. La memoria non diminuisce fino a fine del programma o il rilascio degli oggetti dall'insieme. Quando si guarda il programma su un monitor delle prestazioni, questo sembra essere una perdita di memoria, ma non Ŕ. Comunque, il programma dispone di controllo la quantitÓ di memoria ma ha scelto di non rilascio. Il fatto che il programma dispone ancora di controllo si impedisce il da una perdita di memoria, ma il fatto che il programma consente di mantenere l'aumento della memoria utilizzata pu˛ rendere sembra essere una perdita di memoria.

Sintomi di memoria

Quando la quantitÓ di memoria che utilizza un programma continua a aumentare durante l'esecuzione, questo Ŕ un sintomo di un problema di memoria. (╚ possibile controllare il conteggio di memoria tramite performance monitor). La quantitÓ di memoria utilizzato dal programma pu˛ infine causare l'eseguire esaurito le risorse e per arresto anomalo del sistema.

Riferimenti

Di seguito Ŕ un elenco degli argomenti della Guida per ulteriori informazioni sulla memoria e la gestione:
  • Classe GC
  • Contatori di prestazioni memoria
  • Gestione automatica della memoria
  • InteroperabilitÓ con codice non gestito
Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
317297Guida di orientamento per il debug si blocca, perdite di memoria, blocchi critici (deadlock) e race condition in Visual Basic .NET
Per ulteriori informazioni, visitare il seguente sito Web Microsoft Developer Network (MSDN):
http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx

http://msdn.microsoft.com/en-us/library/fz5w87ad.aspx

http://msdn.microsoft.com/en-us/library/kxx6e7z6.aspx

http://msdn.microsoft.com/en-us/library/s3aw423e.aspx

ProprietÓ

Identificativo articolo: 318263 - Ultima modifica: mercoledý 6 dicembre 2006 - Revisione: 4.7
Le informazioni in questo articolo si applicano a:
  • Microsoft Common Language Runtime (included with the .NET Framework) 1.0
  • Microsoft Common Language Runtime (included with the .NET Framework 1.1)
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Academic Edition
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual J# .NET 2003 Standard Edition
Chiavi:á
kbmt kbvs2005swept kbvs2005applies kbinfo KB318263 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 318263
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com