SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Gestione della memoria e delle risorse in .NET  Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog: http://blogs.devleap.com/marco.blog
Iscriviti su www.microsoft.com/italy/technicalconference/default.mspx ,[object Object],[object Object],[object Object],[object Object],Guest Speaker Bill Gates Non perdere l'appuntamento dedicato  ai professionisti IT e agli sviluppatori
DevLeap: chi siamo ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Chi siete ? ,[object Object],[object Object],[object Object],[object Object],[object Object]
Agenda ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Perché il Garbage Collector ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Algoritmi di Garbage Collection ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Algoritmo mark-and-compact ,[object Object],[object Object],a.b a2.b A a = new A(); a.b = new B(); A a2 = new A(); a2.b = new B(); NextObjPtr a a a2 b
Algoritmo mark-and-compact ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GC fase 1: Mark ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GC fase 2: Compact ,[object Object],[object Object],[object Object]
GC fase 1: Mark NextObjPtr Oggetti “vivi” Oggetti non raggiungibili Spazio libero Root set
GC fase 2: Compact NextObjPtr Oggetti “vivi” Spazio libero Root set Spazio recuperato
Finalization queue ,[object Object],[object Object],[object Object],[object Object],[object Object]
F-reachable queue ,[object Object],[object Object],[object Object]
F-reachable queue Oggetti “vivi” In attesa di Finalize Spazio libero Root set F-reachable queue
F-reachable queue ,[object Object],[object Object],[object Object],[object Object],[object Object]
Pattern IDisposable ,[object Object],[object Object],[object Object],[object Object],[object Object]
Pattern IDisposable (1) class DisposeDemo : BaseClass, IDisposable { OtherRes  otherRes; private  disposed = false; private void freeState { if (!disposed) {  // Evita doppia esecuzione // Chiude risorse allocate (es. handle non gestiti) disposed = true; } } public void  Dispose () { freeState(); otherRes.Dispose();// Dispose oggetti membro base.Dispose();  // Dispose classe base (BaseClass) GC.SuppressFinalize ( this ); } ~DisposeDemo() { freeState(); } }
Pattern IDisposable (2 a) class BaseResource : IDisposable { OtherRes  otherRes; private  disposed = false; protected  virtual  void Dispose( bool disposing ) { if (!this.disposed) { if (disposing) { otherRes.Dispose(); // Dispose oggetti membro } CloseHandle( ... );  // Chiude risorse non gestite this.disposed = true; } } public void  Dispose () { Dispose( true ); GC.SuppressFinalize ( this ); } ~DisposeDemo() { Dispose( false ); } }
Pattern IDisposable (2 b) class MyResource : BaseResource {  // Implementa già IDisposable private  disposed = false; protected  override  void Dispose( bool disposing ) { if (!this.disposed) { if (disposing) { // Dispose altri oggetti gestiti } // Chiude risorse non gestite this.disposed = true; } base.Dispose(); } // La funzione  Dispose()  è già implementata nella classe base // Il  finalizzatore  che chiama Dispose(bool) virtuale è già // implementato nella classe base }
Componenti .NET ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Resurrection ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Resurrection public class BaseObj { // ... ~BaseObj() { Application.ObjHolder = this; GC.ReRegisterForFinalize( this ); } // ... } class Application { static public Object ObjHandler; // ... }
Weak Reference ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Weak Reference ,[object Object],[object Object],[object Object],[object Object],[object Object],WeakReference( Object target ); WeakReference( Object target, Boolean trackResurrection );
Algoritmo generazionale ,[object Object],[object Object],[object Object],[object Object],[object Object]
Algoritmo generazionale ,[object Object],[object Object],G2 Oggetti sopravvissuti a due o più GC G1 Oggetti sopravvissuti a un GC G0 Oggetti mai sottoposti a GC
Algoritmo generazionale ,[object Object],[object Object],[object Object],[object Object],[object Object]
Large Object Heap ,[object Object],[object Object],[object Object],[object Object],[object Object]
Thread e Garbage Collector ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Thread hijacking ,[object Object],int bar()  { return 42; } int foo()  { int ret = bar(); return ret; } GC
Safe Points ,[object Object],int bar()  { ... ... ... ... ... ... ... ... } GC Se GC in attesa, sospende il thread fino a che il GC non viene completato GC Safe Point
Fully interruptible code ,[object Object],... 08  while (condition) { 09  Foo a = new Foo(); 10  Bar b = new Bar(); 11  Foo c = new Foo(); 12 13  a.DoSomething(); 14  condition = c.Good(); 15  } ... {} 14 {c} 13 {a,c} 12 {a,c} 11 {a} 10 {} 09 Oggetti Linea
Concurrent Garbage Collector ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Garbage Collector vs. Heap Win32 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Considerazioni finali ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Riferimenti utili ,[object Object],[object Object],[object Object],[object Object]
Altre Informazioni ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Gestione della memoria e delle risorse in .NET  ,[object Object],[object Object],[object Object],[object Object],[object Object]

Weitere ähnliche Inhalte

Andere mochten auch

Mappa mentale Gestione della memoria
Mappa mentale Gestione della memoriaMappa mentale Gestione della memoria
Mappa mentale Gestione della memoriasaramandozzi95
 
16 - Programmazione: Gestione memoria
16 - Programmazione: Gestione memoria16 - Programmazione: Gestione memoria
16 - Programmazione: Gestione memoriaMajong DevJfu
 
" కూరగాయ " పంటలకు సంబందించి తరచుగా అడిగే ప్రశ్నలు
" కూరగాయ " పంటలకు సంబందించి తరచుగా అడిగే ప్రశ్నలు " కూరగాయ " పంటలకు సంబందించి తరచుగా అడిగే ప్రశ్నలు
" కూరగాయ " పంటలకు సంబందించి తరచుగా అడిగే ప్రశ్నలు KACHARAGADLA MEDIA CORP
 
01 HappyDev-lite-2015 autumn. Дмитрий Пашкевич. Азбука разработчика, которыи...
01 HappyDev-lite-2015 autumn. Дмитрий Пашкевич. Азбука разработчика, которыи...01 HappyDev-lite-2015 autumn. Дмитрий Пашкевич. Азбука разработчика, которыи...
01 HappyDev-lite-2015 autumn. Дмитрий Пашкевич. Азбука разработчика, которыи...HappyDev-lite
 
Reflexión sesión 5
Reflexión sesión 5Reflexión sesión 5
Reflexión sesión 5vilmasalgadoo
 
Curso mei 805 prevención y seguridad básica
Curso mei 805   prevención y seguridad básicaCurso mei 805   prevención y seguridad básica
Curso mei 805 prevención y seguridad básicaProcasecapacita
 
12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...
12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...
12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...HappyDev-lite
 
certifi - berkely - english
certifi - berkely - englishcertifi - berkely - english
certifi - berkely - englishsabari s v
 
2 a4 22tcn262_2000p3
2 a4 22tcn262_2000p32 a4 22tcn262_2000p3
2 a4 22tcn262_2000p3Ttx Love
 
Offerte scuola 2015-2016
Offerte scuola 2015-2016Offerte scuola 2015-2016
Offerte scuola 2015-2016Simone Lorusso
 
Taking charge-of-your-brain1-141103142620-conversion-gate01
Taking charge-of-your-brain1-141103142620-conversion-gate01Taking charge-of-your-brain1-141103142620-conversion-gate01
Taking charge-of-your-brain1-141103142620-conversion-gate01Hafiza Bano
 
Gestione della memoria in C++
Gestione della memoria in C++Gestione della memoria in C++
Gestione della memoria in C++Ilio Catallo
 
звіт керівника за 2015 2016 н.р
звіт керівника за 2015 2016 н.рзвіт керівника за 2015 2016 н.р
звіт керівника за 2015 2016 н.рRebbit2015
 
36hp engine 2 way bevel gearbox 1500rpm,80hp trencher gearbox input and outpu...
36hp engine 2 way bevel gearbox 1500rpm,80hp trencher gearbox input and outpu...36hp engine 2 way bevel gearbox 1500rpm,80hp trencher gearbox input and outpu...
36hp engine 2 way bevel gearbox 1500rpm,80hp trencher gearbox input and outpu...Jacton Electromechanical Co.,Ltd
 
Product design
Product designProduct design
Product designAlexis Wei
 

Andere mochten auch (19)

Mappa mentale Gestione della memoria
Mappa mentale Gestione della memoriaMappa mentale Gestione della memoria
Mappa mentale Gestione della memoria
 
16 - Programmazione: Gestione memoria
16 - Programmazione: Gestione memoria16 - Programmazione: Gestione memoria
16 - Programmazione: Gestione memoria
 
" కూరగాయ " పంటలకు సంబందించి తరచుగా అడిగే ప్రశ్నలు
" కూరగాయ " పంటలకు సంబందించి తరచుగా అడిగే ప్రశ్నలు " కూరగాయ " పంటలకు సంబందించి తరచుగా అడిగే ప్రశ్నలు
" కూరగాయ " పంటలకు సంబందించి తరచుగా అడిగే ప్రశ్నలు
 
Canon_reference
Canon_referenceCanon_reference
Canon_reference
 
01 HappyDev-lite-2015 autumn. Дмитрий Пашкевич. Азбука разработчика, которыи...
01 HappyDev-lite-2015 autumn. Дмитрий Пашкевич. Азбука разработчика, которыи...01 HappyDev-lite-2015 autumn. Дмитрий Пашкевич. Азбука разработчика, которыи...
01 HappyDev-lite-2015 autumn. Дмитрий Пашкевич. Азбука разработчика, которыи...
 
Reflexión sesión 5
Reflexión sesión 5Reflexión sesión 5
Reflexión sesión 5
 
Curso mei 805 prevención y seguridad básica
Curso mei 805   prevención y seguridad básicaCurso mei 805   prevención y seguridad básica
Curso mei 805 prevención y seguridad básica
 
12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...
12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...
12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...
 
certifi - berkely - english
certifi - berkely - englishcertifi - berkely - english
certifi - berkely - english
 
THRS CIED PHYSICIAN TRAINING COURSE
THRS CIED PHYSICIAN TRAINING COURSETHRS CIED PHYSICIAN TRAINING COURSE
THRS CIED PHYSICIAN TRAINING COURSE
 
2 a4 22tcn262_2000p3
2 a4 22tcn262_2000p32 a4 22tcn262_2000p3
2 a4 22tcn262_2000p3
 
Offerte scuola 2015-2016
Offerte scuola 2015-2016Offerte scuola 2015-2016
Offerte scuola 2015-2016
 
Autoestima
AutoestimaAutoestima
Autoestima
 
Taking charge-of-your-brain1-141103142620-conversion-gate01
Taking charge-of-your-brain1-141103142620-conversion-gate01Taking charge-of-your-brain1-141103142620-conversion-gate01
Taking charge-of-your-brain1-141103142620-conversion-gate01
 
Gestione della memoria in C++
Gestione della memoria in C++Gestione della memoria in C++
Gestione della memoria in C++
 
звіт керівника за 2015 2016 н.р
звіт керівника за 2015 2016 н.рзвіт керівника за 2015 2016 н.р
звіт керівника за 2015 2016 н.р
 
36hp engine 2 way bevel gearbox 1500rpm,80hp trencher gearbox input and outpu...
36hp engine 2 way bevel gearbox 1500rpm,80hp trencher gearbox input and outpu...36hp engine 2 way bevel gearbox 1500rpm,80hp trencher gearbox input and outpu...
36hp engine 2 way bevel gearbox 1500rpm,80hp trencher gearbox input and outpu...
 
Planos de ing inst
Planos de ing instPlanos de ing inst
Planos de ing inst
 
Product design
Product designProduct design
Product design
 

Ähnlich wie Asp.net gestione della_memoria

Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of KotlinErik Minarini
 
PostgrSQL 9.3&9.4 - DjangoVillage
PostgrSQL 9.3&9.4 - DjangoVillagePostgrSQL 9.3&9.4 - DjangoVillage
PostgrSQL 9.3&9.4 - DjangoVillageMiriade Spa
 
Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3Martino Bordin
 
Pomeriggio Entity Framework - Code First
Pomeriggio Entity Framework - Code FirstPomeriggio Entity Framework - Code First
Pomeriggio Entity Framework - Code FirstDomusDotNet
 
Reactive programming principles
Reactive programming principlesReactive programming principles
Reactive programming principlesRiccardo Cardin
 
Programmazione web libera dai framework
Programmazione web libera dai frameworkProgrammazione web libera dai framework
Programmazione web libera dai frameworkFrancesca1980
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.jsMichele Capra
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con ScalaFranco Lombardo
 
Write less do more...with jQuery
Write less do more...with jQueryWrite less do more...with jQuery
Write less do more...with jQueryXeDotNet
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Alberto Pasca
 
Abusing HTML 5 Client-side Storage
Abusing HTML 5 Client-side StorageAbusing HTML 5 Client-side Storage
Abusing HTML 5 Client-side Storageameft
 

Ähnlich wie Asp.net gestione della_memoria (20)

Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of Kotlin
 
Javascript
JavascriptJavascript
Javascript
 
Pillole di C++
Pillole di C++Pillole di C++
Pillole di C++
 
PostgrSQL 9.3&9.4 - DjangoVillage
PostgrSQL 9.3&9.4 - DjangoVillagePostgrSQL 9.3&9.4 - DjangoVillage
PostgrSQL 9.3&9.4 - DjangoVillage
 
Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3
 
Pomeriggio Entity Framework - Code First
Pomeriggio Entity Framework - Code FirstPomeriggio Entity Framework - Code First
Pomeriggio Entity Framework - Code First
 
Reactive programming principles
Reactive programming principlesReactive programming principles
Reactive programming principles
 
Programmazione web libera dai framework
Programmazione web libera dai frameworkProgrammazione web libera dai framework
Programmazione web libera dai framework
 
Java Advanced
Java AdvancedJava Advanced
Java Advanced
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
Vb.Net
Vb.NetVb.Net
Vb.Net
 
Write less do more...with jQuery
Write less do more...with jQueryWrite less do more...with jQuery
Write less do more...with jQuery
 
Java lezione1
Java lezione1Java lezione1
Java lezione1
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
 
unreal IRCd 3281
unreal IRCd 3281unreal IRCd 3281
unreal IRCd 3281
 
Abusing HTML 5 Client-side Storage
Abusing HTML 5 Client-side StorageAbusing HTML 5 Client-side Storage
Abusing HTML 5 Client-side Storage
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
 

Asp.net gestione della_memoria

  • 1. Gestione della memoria e delle risorse in .NET Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog: http://blogs.devleap.com/marco.blog
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. GC fase 1: Mark NextObjPtr Oggetti “vivi” Oggetti non raggiungibili Spazio libero Root set
  • 13. GC fase 2: Compact NextObjPtr Oggetti “vivi” Spazio libero Root set Spazio recuperato
  • 14.
  • 15.
  • 16. F-reachable queue Oggetti “vivi” In attesa di Finalize Spazio libero Root set F-reachable queue
  • 17.
  • 18.
  • 19. Pattern IDisposable (1) class DisposeDemo : BaseClass, IDisposable { OtherRes otherRes; private disposed = false; private void freeState { if (!disposed) { // Evita doppia esecuzione // Chiude risorse allocate (es. handle non gestiti) disposed = true; } } public void Dispose () { freeState(); otherRes.Dispose();// Dispose oggetti membro base.Dispose(); // Dispose classe base (BaseClass) GC.SuppressFinalize ( this ); } ~DisposeDemo() { freeState(); } }
  • 20. Pattern IDisposable (2 a) class BaseResource : IDisposable { OtherRes otherRes; private disposed = false; protected virtual void Dispose( bool disposing ) { if (!this.disposed) { if (disposing) { otherRes.Dispose(); // Dispose oggetti membro } CloseHandle( ... ); // Chiude risorse non gestite this.disposed = true; } } public void Dispose () { Dispose( true ); GC.SuppressFinalize ( this ); } ~DisposeDemo() { Dispose( false ); } }
  • 21. Pattern IDisposable (2 b) class MyResource : BaseResource { // Implementa già IDisposable private disposed = false; protected override void Dispose( bool disposing ) { if (!this.disposed) { if (disposing) { // Dispose altri oggetti gestiti } // Chiude risorse non gestite this.disposed = true; } base.Dispose(); } // La funzione Dispose() è già implementata nella classe base // Il finalizzatore che chiama Dispose(bool) virtuale è già // implementato nella classe base }
  • 22.
  • 23.
  • 24. Resurrection public class BaseObj { // ... ~BaseObj() { Application.ObjHolder = this; GC.ReRegisterForFinalize( this ); } // ... } class Application { static public Object ObjHandler; // ... }
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.

Hinweis der Redaktion

  1. Bisogna specificare che i thread devono essere fermati in punti noti , in modo che il GC possa sapere quali sono gli oggetti che fanno parte del root set (variabili locali sull’albero di chiamata di ogni thread)