📘 C# Blog Series – Blog 29 **“C# Memory Management — Garbage Collector कैसे काम करता है?

📘 C# Blog Series – Blog 29

**“C# Memory Management — Garbage Collector कैसे काम करता है?






(Real-Life Example: GPS Server में Memory Leaks रोकना)”**

C# की सबसे बड़ी ताकतों में से एक है Automatic Memory Management
इसमें Garbage Collector (GC) आपके लिए memory संभालता है—
लेकिन गलत coding से memory leak फिर भी हो सकता है।

और GPS Tracking Server जैसे long-running systems में
Memory Leak = Server Crash
इसलिए Memory Management समझना बहुत ज़रूरी है।

आज हम इसे बेहद आसान तरीके + GPS server के real examples के साथ सीखेंगे।


🟦 1. Memory Management क्या है?

जब आप object बनाते हो:

var device = new GPSDevice();

तो memory allocate होती है।

जब object use नहीं होता → उसे हटाना चाहिए।
C# में यह काम Garbage Collector खुद करता है।


🟢 2. Garbage Collector (GC) क्या करता है?

GC automatically:

✔ Unused objects हटाता है
✔ Memory free करता है
✔ App को crash होने से बचाता है
✔ Long-term servers stable रखता है

You don’t delete memory manually in C#.


3. GC कैसे decide करता है कि कौनसा object हटाना है?

Simple rule:

जिस object को कोई reference नहीं कर रहा — वो delete हो जाएगा।

Example:

GPSDevice d = new GPSDevice(); d = null; // GC can delete it

🌟 4. GC Generations (Very Important)

Garbage Collector objects को तीन generations में manage करता है:

🔹 Generation 0

छोटे objects, short-lived
(e.g., small strings, temporary packet processing)

🔹 Generation 1

medium-lived objects

🔹 Generation 2

long-lived
(e.g., global lists, cache, static objects)

GPS servers में most objects Gen 2 तक जाते हैं क्योंकि
device list, logs, buffers लंबे time तक memory में रहते हैं।


🚀 5. Real-Life GPS Server Memory Issues

High-load GPS server में ये memory problems बार-बार होती हैं:

❌ 1. ConnectedDevices list बिना साफ किए बढ़ती जाती है

❌ 2. हर packet के साथ new string allocation

❌ 3. TCP buffer कभी free नहीं हुआ

❌ 4. WebSocket clients disconnect नहीं हुए

❌ 5. Thread leakage

❌ 6. Large logs memory में रखे रहते हैं

Memory leak = server slow → freeze → crash.


🟠 6. Memory Leak Example (Dangerous Code)

List<string> packets = new List<string>(); void ReadPacket(string pkt) { packets.Add(pkt); // never cleared → Leak }

Days बाद server explode!


🔵 7. Safe Version (Old packets remove करें)

if (packets.Count > 10000) packets.Clear();

या
Store in file → not memory.


8. Using using — सबसे Important Memory Technique

Resources जैसे file, network, stream खुद free नहीं होते।
Use:

using(var stream = client.GetStream()) { stream.Read(...); }

यह stream को auto-close करता है →
Memory leak नहीं होगा।


🌟 9. Real-Life GPS TCP Code Without 'using' (Leak)

var stream = client.GetStream(); stream.Read(buffer);

अगर client disconnect हुआ →
stream कभी free नहीं होगा।


🟣 Correct Version:

using var stream = client.GetStream();

अब GC safely clean करेगा।


🧠 10. Avoid Large Objects in RAM

GPS Data logs को memory में never store करो:

❌ Wrong:

List<string> allLogs = new List<string>();

✔ Correct:

File.AppendAllText("logs.txt", log);

🔥 11. Dispose Pattern (Advanced + Important)

When handling:

  • Sockets

  • Streams

  • Database connections

  • Timers

Use IDisposable:

public void Dispose() { stream?.Dispose(); socket?.Dispose(); }

🛡 12. Avoid Unbounded Collections (Major Server Killer)

GPS server में:

Dictionary<string, GPSDevice> Devices;

यह dictionary infinite ना बने।

Add cleanup logic:

var offline = Devices.Values .Where(d => d.LastUpdated < DateTime.Now.AddHours(-5)) .ToList(); foreach(var d in offline) Devices.Remove(d.IMEI);

📌 13. GC.Collect() — Should You Use It?

❌ 99% cases → NO
✔ Only rare cases like very heavy memory usage.

GC खुद best timing पता करता है।


🧪 14. Memory Monitoring (Production Practice)

Use:

  • dotMemory

  • Visual Studio Diagnostics

  • Prometheus metrics

  • Memory profiler

GPS server में यह mandatory है।


🔚 Conclusion

C# Memory Management आपके server को बनाता है:

✔ Stable
✔ Leak-free
✔ Fast
✔ Crash-proof
✔ Long-running

GPS server सबसे ज्यादा memory-sensitive system होता है।
इसीलिए GC concepts + safe coding बहुत ज़रूरी है।

Post a Comment

0 Comments

Translate

Close Menu