Ad Code

Responsive Advertisement

adsense

Object Pool en C#


Intention: le but du pool d'objets est de créer un objet pool afin de réduire la charge de création d'objets.

Le regroupement d’objets n’est rien d’autre que la création d’une quantité limitée d’objets en mémoire et sa réutilisation au lieu de créer un nouvel objet. Ceci peut être réalisé avec l'aide d'un gestionnaire de pool.
Le gestionnaire de pool connaît le nombre maximal d'instances à créer pour un type d'objet. Une fois que le nombre maximum est atteint, le gestionnaire de pool les place dans un conteneur d'objets et toutes les nouvelles demandes d'objets sont traitées à partir du conteneur d'objets.

Avantages:

Le principal avantage de l’initialisation de Lazy est qu’elle ne consommera pas de ressources volumineuses inutiles pour la création de l’objet tant que ce n’est pas nécessaire pour la première fois. De plus, si l'objet est déjà créé, la demande est servie à partir de l'objet créé au lieu de créer un nouvel objet.


Exemple de logiciel et explication du code:

Supposons que l’une de nos exigences en matière de code consiste à créer des objets Employé. Nous avons une restriction maximale de deux objets et plus de deux demandes doivent être traitées à partir de la file d'attente. Pour notre exemple, nous allons utiliser la méthode d'usine. Nous allons utiliser la classe «File d'attente» de l'espace de noms «System.Collections» pour la mise en commun de nos objets.

Remarque: L'employé peut ne pas être un bon exemple lorsque vous pensez à un logiciel prospectif, mais cela vous aide certainement à comprendre le concept.


EmployeeFactory.cs

using System;using System.Collections;
namespace ObjectPooling{public class EmployeeFactory{//Defining Max pool size of Objects as twostatic int _intMaxPoolSize = 2;
//Collection class to hold objectsstatic readonly Queue objPool = new Queue(_intMaxPoolSize);
//Creates new employee only when the count of objects is more than two//Otherwise served from poolpublic Employee GetEmployee(){Employee objEmployee;if (Employee._intCounter >= 2 && objPool.Count > 1){objEmployee = GetEmployeeFromPool();}else{objEmployee = CreateNewEmployee();}return objEmployee;}
private Employee GetEmployeeFromPool(){Employee objEmp;if (objPool.Count > 1){objEmp = (Employee)objPool.Dequeue();Employee._intCounter--;}else{objEmp = new Employee();}return objEmp;}private Employee CreateNewEmployee(){Employee objEmp = new Employee();objPool.Enqueue(objEmp);return objEmp;}}}



Employee.cs

using System;
namespace ObjectPooling{public class Employee{public static int _intCounter = 0;
public Employee(){_intCounter = _intCounter + 1;_FirstName = "FirstName" + _intCounter.ToString();_LastName = "LastName" + _intCounter.ToString();}
private string _FirstName;
public string FirstName{get { return _FirstName; }set { _FirstName = value; }}private string _LastName;
public string LastName{get { return _LastName; }set { _LastName = value; }}}}

Default.aspx.cs

protected void btnCreate_Click(object sender, EventArgs e){EmployeeFactory objEFact = new EmployeeFactory();
Employee obj1 = objEFact.GetEmployee();Employee obj2 = objEFact.GetEmployee();Employee obj3 = objEFact.GetEmployee();Employee obj4 = objEFact.GetEmployee();
Response.Write("Object 1 Values are-----" + obj1.FirstName +"--"+obj1.LastName+"--");Response.Write("Object 2 Values are-----" + obj2.FirstName +"--"+obj2.LastName+"--");Response.Write("Object 3 Values are-----" + obj3.FirstName +"--"+obj3.LastName+"--");Response.Write("Object 4 Values are-----" + obj4.FirstName + "--" + obj4.LastName + "--");}

Ad Code

Responsive Advertisement