(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 के साथ सीखेंगे।
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 करना पड़ता है।
using block automatically Dispose() call कर देता है।
Example:
using (var file = new StreamReader("log.txt"))
{
var text = file.ReadToEnd();
}
Block खत्म → file.Dispose() automatically call होता है।
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 हो जाएगा।
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 कभी नहीं होगा।
Timers background threads run करते रहते हैं।
अगर dispose नहीं किया → memory leak।
Timer t = new Timer(1000);
t.Start();
// ... later
t.Dispose();
GPS server में हर periodic timer को properly cleanup करना चाहिए।
using (var ws = new ClientWebSocket())
{
await ws.ConnectAsync(uri, CancellationToken.None);
}
Disconnect होने पर cleanup हो जाता है।
जब आपकी 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 हो जाते हैं।
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");
❌ Wrong:
static StreamWriter writer = new StreamWriter("gps.txt");
⛔ इससे file कभी close नहीं होती → system crash.
✔ TCP Stream
✔ TCP Client
✔ File Stream
✔ StreamWriter
✔ BinaryReader/Writer
✔ WebSocket
✔ HttpClient
✔ Timer
✔ Database Connection
✔ Image processing streams
Dispose is LIFE for long-running servers.
C# IDisposable & using आपके application को बनाते हैं:
✔ Memory-leak free
✔ Safe
✔ Clean
✔ Fast
✔ Reliable
✔ Production-ready
GPS tracking server जैसे systems में resource cleanup mandatory है।
इसीसे आपका server कई महीनों तक बिना restart के चल पाता है।
0 Comments
Thanks for Commenting on our blogs, we will revert back with answer of your query.
EmojiThanks & Regards
Sonu Yadav