コード例 #1
0
        internal byte[] GetLargeBuffer(int requiredSize)
        {
            byte[] array;
            requiredSize = RoundToLargeBufferMultiple(requiredSize);
            var num = requiredSize / largeBufferMultiple - 1;

            if (num < largePools.Length)
            {
                if (!largePools[num].TryPop(out array))
                {
                    array = new byte[requiredSize];
                    LargeBufferCreated?.Invoke();
                }
                else
                {
                    Interlocked.Add(ref largeBufferFreeSize[num], -array.Length);
                }
            }
            else
            {
                num   = largeBufferInUseSize.Length - 1;
                array = new byte[requiredSize];
                LargeBufferCreated?.Invoke();
            }

            Interlocked.Add(ref largeBufferInUseSize[num], array.Length);
            return(array);
        }
コード例 #2
0
 internal void ReportLargeBufferCreated()
 {
     Counter.ReportLargeBufferCreated();
     LargeBufferCreated?.Invoke();
 }
コード例 #3
0
 internal void ReportLargeBufferCreated() => LargeBufferCreated?.Invoke();