অবজেক্ট পুল হল একটি সফটওয়্যার প্যাটার্ন যা লিমিটেড বা এক্সপেনসিভ রিসোর্স (ডাটাবেস কানেকশন, থ্রেড, বড় অবজেক্ট) পুনঃব্যবহার করে পারফরম্যান্স বেড়ায়।
কিভাবে কাজ করে
- অ্যাক্টিভেশন: পুল থেকে অবজেক্ট নেওয়া (Acquire)
- ডিঅ্যাক্টিভেশন: ব্যবহার শেষে পুলে ফেরত দেওয়া (Release)
.NET-এ বিল্ট-ইন সাপোর্ট
System.EnterpriseServices.ObjectPoolingAttribute(COM+ সার্ভিসড কম্পোনেন্টের জন্য)ArrayPool<T>(System.Buffers) — অ্যারে পুলিং-এর জন্যMemoryPool<T>— মেমরি বাফার পুলিং- থার্ড-পার্টি:
Microsoft.Extensions.ObjectPool(ASP.NET Core-এ ব্যবহৃত)
ArrayPool উদাহরণ (সাম্প্রতিক .NET)
using System;
using System.Buffers;
class ArrayPoolDemo
{
static void Main()
{
var pool = ArrayPool<byte>.Shared;
// ১KB বাফার ভাড়া নিন
byte[] buffer = pool.Rent(1024);
try
{
// বাফার ব্যবহার করুন
buffer[0] = 0xFF;
Console.WriteLine("বাফার ব্যবহার করা হয়েছে");
}
finally
{
// অবশ্যই রিটার্ন করুন
pool.Return(buffer);
}
}
}
কাস্টম Object Pool (Microsoft.Extensions.ObjectPool)
// NuGet: Microsoft.Extensions.ObjectPool
using Microsoft.Extensions.ObjectPool;
public class ExpensiveResource : IDisposable
{
public int Id { get; }
public ExpensiveResource(int id) { Id = id; Console.WriteLine($"Created {Id}"); }
public void Dispose() => Console.WriteLine($"Disposed {Id}");
}
class CustomPoolDemo
{
static void Main()
{
var pool = new DefaultObjectPool<ExpensiveResource>(
new PooledObjectPolicy<ExpensiveResource>()
);
var obj1 = pool.Get(); // Create 1
var obj2 = pool.Get(); // Create 2
pool.Return(obj1);
var obj3 = pool.Get(); // Reuse 1
}
}
কখন ব্যবহার করবেন
- অবজেক্ট তৈরি করা ব্যয়বহুল (DB কানেকশন, SSL সокেট, বড় বাফার)
- উচ্চ ফ্রিকোয়েন্সি 앨োকেশন/ডি-অ্যালোকেশন (গেমিং, রিয়েল-টাইম)
- গারবেজ কलेক্টর প্রেশার কমাতে চাইলে
সতর্কতা
- পুল থেকে নেওয়া অবজেক্ট
Resetবা ক্লিয়ার করতে হয় (স্টেট লিক এড়াতে)। IDisposableঅবজেক্ট পুলিং-এ সতর্কতা অবশ্যক।- মেমরি লিক এড়াতে
Returnনিশ্চিত করুন (using প্যাটার্ন বা try/finally)।