📘 C# Blog Series – Blog 30 **“C# IDisposable & Using — Resources को Safely Release कैसे करें?

📘 C# Blog Series – Blog 30

**“C# IDisposable & Using — Resources को Safely Release कैसे करें?






(Real-Life Example: TCP Streams, Files, Timers को Properly Close करना)”**

C# में IDisposable और using statement वो फीचर है
जो आपके application को memory leak, stream leak, socket leak और
server crash से बचाता है।

GPS server जैसे systems में जहाँ:

  • हर device TCP stream से जुड़ा होता है

  • Data लगातार आता रहता है

  • Files open होती हैं

  • Timers run होते रहते हैं

  • WebSockets चलते हैं

वहाँ resource release life-saving होता है।

आज हम IDisposable + using को real GPS examples के साथ सीखेंगे।


🟦 1. IDisposable क्या है? (Simple Definition)

IDisposable एक interface है जिसमें सिर्फ एक method होता है:

void Dispose();

Dispose() =
Object द्वारा use की गई system resources release करो।

Use cases:

  • Streams

  • Files

  • Network connections

  • Database connections

  • Timers

  • Sockets

  • Images

इन resources को GC (Garbage Collector) खुद free नहीं कर सकता —
आपको Dispose() से manually free करना पड़ता है।


🟢 2. using Statement (Recommended Way)

using block automatically Dispose() call कर देता है।

Example:

using (var file = new StreamReader("log.txt")) { var text = file.ReadToEnd(); }

Block खत्म → file.Dispose() automatically call होता है।


3. Real-Life GPS Example: TCP Stream को Safely Close करना

Wrong (Leak):

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

Correct:

using var stream = client.GetStream(); int read = stream.Read(buffer);

अब device disconnect हो जाए →
stream safely dispose हो जाएगा।


🌟 4. File Handling में Dispose बहुत जरूरी

Wrong:

var file = new StreamWriter("gps.txt"); file.WriteLine("Data");

Correct:

using(var file = new StreamWriter("gps.txt", true)) { file.WriteLine("Data"); }

File lock issue कभी नहीं होगा।


🟠 5. Timer को भी Dispose करना चाहिए (Most Developers Forget This!)

Timers background threads run करते रहते हैं।
अगर dispose नहीं किया → memory leak।

Timer t = new Timer(1000); t.Start(); // ... later t.Dispose();

GPS server में हर periodic timer को properly cleanup करना चाहिए।


🟣 6. WebSocket को Dispose करना (Prevent Ghost Connections)

using (var ws = new ClientWebSocket()) { await ws.ConnectAsync(uri, CancellationToken.None); }

Disconnect होने पर cleanup हो जाता है।


🔵 7. Custom Class में IDisposable Implement करना

जब आपकी class में कोई ऐसा resource हो जो manually release करना हो
(e.g., TCP stream, File, Timer, Socket)
तब IDisposable implement करो।

Example:

class GpsClient : IDisposable { private readonly TcpClient _client; private readonly NetworkStream _stream; public GpsClient(TcpClient client) { _client = client; _stream = client.GetStream(); } public void Dispose() { _stream?.Dispose(); _client?.Close(); } }

Use:

using var gps = new GpsClient(client); gps.Process();

GPS client disconnect होते ही
सब resources cleanup हो जाते हैं।


8. Dispose Pattern (Advanced & Professional)

Recommended for large classes:

public class PacketLogger : IDisposable { private StreamWriter _writer; private bool disposed = false; public PacketLogger(string path) { _writer = new StreamWriter(path); } public void Log(string msg) { if (disposed) return; _writer.WriteLine(msg); } public void Dispose() { if (!disposed) { _writer?.Dispose(); disposed = true; } } }

Use:

using var logger = new PacketLogger("log.txt"); logger.Log("Packet received");

🧠 9. सबसे बड़ी गलती — Streams को कभी भी static मत बनाओ!

❌ Wrong:

static StreamWriter writer = new StreamWriter("gps.txt");

⛔ इससे file कभी close नहीं होती → system crash.


🔥 10. GPS Server में Dispose कहाँ-कहाँ जरूरी है?

✔ TCP Stream
✔ TCP Client
✔ File Stream
✔ StreamWriter
✔ BinaryReader/Writer
✔ WebSocket
✔ HttpClient
✔ Timer
✔ Database Connection
✔ Image processing streams

Dispose is LIFE for long-running servers.


🔚 Conclusion

C# IDisposable & using आपके application को बनाते हैं:

✔ Memory-leak free
✔ Safe
✔ Clean
✔ Fast
✔ Reliable
✔ Production-ready

GPS tracking server जैसे systems में resource cleanup mandatory है।
इसीसे आपका server कई महीनों तक बिना restart के चल पाता है।

Post a Comment

0 Comments

Translate

Close Menu