-
Configuration Management: Added PoolConfiguration class for production settings
- MaxPoolSize: Configurable maximum pool capacity
- MaxActiveObjects: Configurable maximum concurrent active objects
- DefaultTimeout: Configurable default timeout for async operations
- ValidateOnReturn: Optional validation when objects are returned
- ValidationFunction: Custom validation logic for returned objects
-
Health Monitoring: Comprehensive health check capabilities
- IPoolHealth interface for health status monitoring
- Real-time health status with utilization percentage
- Health messages for diagnostic information
- Integration-ready for health check frameworks
-
Logging Integration: Full Microsoft.Extensions.Logging support
- Debug-level logging for pool operations
- Warning-level logging for configuration violations
- Error-level logging for validation failures
- Structured logging with relevant context
-
Metrics Export: Production monitoring integration
- IPoolMetrics interface for metrics export
- Dictionary-based metrics format for easy integration
- Compatible with Prometheus, Application Insights, etc.
- Real-time performance counters
-
Resource Management: Enhanced disposal and cleanup
- Proper async disposal patterns
- Resource leak prevention
- Graceful shutdown handling
-
Validation Framework: Robust object validation
- Return-time validation with configurable functions
- Health status based on validation results
- Automatic handling of invalid objects
- Thread-safe operations with proper locking
- Comprehensive test coverage (23 tests)
- Performance optimization (O(1) operations)
- Configuration management
- Health monitoring
- Logging integration
- Metrics export
- Async support with cancellation
- Error handling and validation
- Multi-framework support (.NET 8.0, 9.0)
- Documentation and examples
var config = new PoolConfiguration
{
MaxPoolSize = 100,
MaxActiveObjects = 50,
DefaultTimeout = TimeSpan.FromSeconds(10),
ValidateOnReturn = true,
ValidationFunction = obj => obj != null && IsValid(obj)
};
var pool = new ObjectPool<MyClass>(initialObjects, config, logger);// Check pool health
if (pool.IsHealthy)
{
var item = pool.GetObject();
// Use item
}
// Detailed health status
var healthStatus = pool.GetHealthStatus();
Console.WriteLine($"Pool Health: {healthStatus.IsHealthy}");
Console.WriteLine($"Utilization: {healthStatus.UtilizationPercentage:F1}%");// Export metrics for Prometheus/AppInsights
var metrics = pool.ExportMetrics();
foreach (var metric in metrics)
{
Console.WriteLine($"{metric.Key}: {metric.Value}");
}services.AddLogging();
services.AddSingleton<ObjectPool<MyClass>>(provider =>
{
var logger = provider.GetService<ILogger<ObjectPool<MyClass>>>();
return new ObjectPool<MyClass>(initialObjects, config, logger);
});