##// END OF EJS Templates
docs
cin -
r154:2dcdee4c0810 v2
parent child
Show More
@@ -1,4 +1,5
1 1 namespace Implab.Components {
2
2 3 public enum ExecutionState {
3 4 Uninitialized,
4 5 Initial,
@@ -4,18 +4,17 using System.Threading;
4 4
5 5 namespace Implab.Components {
6 6 /// <summary>
7 /// Базовый класс для создания пулов объектов.
7 /// The base class for creating object pools.
8 8 /// </summary>
9 9 /// <remarks>
10 /// <para>Пул объектов позволяет многократно использовать один и тотже объект,
11 /// что актуально для объектов, создание которых требует существенных ресурсов.
12 /// Пул объектов использует слабые ссылки, чтобы не препятствовать освобождению
13 /// ресурсов и создает новые объекты при необходимости.</para>
10 /// <para>The objects pool is offers frequently requested objects to be reused, this gives
11 /// a gool speed improvement for the 'heavy' objects. To avoid memory overhead the pool uses
12 /// weak references allowing CG to do it's work. If there are no free objects in the pool
13 /// they are created on demand. </para>
14 14 /// <para>
15 /// Наследники должны реализовывать метод <see cref="CreateInstance()"/> для создания
16 /// новых экземпляров.
15 /// Implementors need to defined a <see cref="CreateInstance()"/> method
17 16 /// </para>
18 /// <para>Пул поддерживает обращения сразу из нескольких потоков.</para>
17 /// <para>The instances of this class are thred-safe.</para>
19 18 /// </remarks>
20 19 public abstract class ObjectPool<T> where T : class {
21 20 readonly AsyncQueue<WeakReference> m_queue = new AsyncQueue<WeakReference>();
@@ -32,11 +31,22 namespace Implab.Components {
32 31 m_size = size;
33 32 }
34 33
34 /// <summary>
35 /// Creates the instance if there are no free ones in the pool.
36 /// </summary>
37 /// <returns>The new instance.</returns>
35 38 protected abstract T CreateInstance();
36 39
40 /// <summary>
41 /// Cleanups the instance.
42 /// </summary>
43 /// <param name="instance">The instance to cleanup and prepare it for the next use.</param>
37 44 protected virtual void CleanupInstance(T instance) {
38 45 }
39 46
47 /// <summary>
48 /// Allocate free instance from the pool or reates a new one.
49 /// </summary>
40 50 public T Allocate() {
41 51 WeakReference reference;
42 52 while (m_queue.TryDequeue(out reference)) {
@@ -49,6 +59,11 namespace Implab.Components {
49 59 return CreateInstance();
50 60 }
51 61
62 /// <summary>
63 /// Release the specified instance and returns it to the pool of free instances.
64 /// </summary>
65 /// <param name="instance">The instance to return to the pool.</param>
66 /// <remarks>Before the instance is returned to the pool the <see cref="CleanupInstance(T)"/> is called.</remarks>
52 67 public void Release(T instance) {
53 68 if (m_count < m_size && instance != null) {
54 69 Interlocked.Increment(ref m_count);
General Comments 0
You need to be logged in to leave comments. Login now