53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| 
 | |
| namespace FishNet.Utility.Performance
 | |
| {
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Retrieves and stores byte arrays using a pooling system.
 | |
|     /// </summary>
 | |
|     public static class ByteArrayPool
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// Stored byte arrays.
 | |
|         /// </summary>
 | |
|         private static Queue<byte[]> _byteArrays = new Queue<byte[]>();
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Returns a byte array which will be of at lesat minimum length. The returned array must manually be stored.
 | |
|         /// </summary>
 | |
|         public static byte[] Retrieve(int minimumLength)
 | |
|         {
 | |
|             byte[] result = null;
 | |
| 
 | |
|             if (_byteArrays.Count > 0)
 | |
|                 result = _byteArrays.Dequeue();
 | |
| 
 | |
|             int doubleMinimumLength = (minimumLength * 2);
 | |
|             if (result == null)
 | |
|                 result = new byte[doubleMinimumLength];
 | |
|             else if (result.Length < minimumLength)
 | |
|                 Array.Resize(ref result, doubleMinimumLength);
 | |
| 
 | |
|             return result;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Stores a byte array for re-use.
 | |
|         /// </summary>
 | |
|         public static void Store(byte[] buffer)
 | |
|         {
 | |
|             /* Holy cow that's a lot of buffered
 | |
|              * buffers. This wouldn't happen under normal
 | |
|              * circumstances but if the user is stress
 | |
|              * testing connections in one executable perhaps. */
 | |
|             if (_byteArrays.Count > 300)
 | |
|                 return;
 | |
|             _byteArrays.Enqueue(buffer);
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
| 
 | |
| } |