示例#1
0
    public void Push(FramePacket frame)
    {
        stats.CountFrameLoad();
        FramePacket trashBuf = null;

        lock (this)
        {
            frames.AddFront(frame);
            if (frames.Count >= maxQueueCount)
            {
                stats.CountFrameSkip();
                trashBuf = frames.RemoveBack();
            }
        }

        if (trashBuf != null && poolBuffer)
        {
            bufferPool.Push(trashBuf);
        }
    }
    public void Push(FramePacket frame)
    {
        stats.CountFrameLoad();
        FramePacket trashBuf = null;

        lock (this)
        {
            frames.AddFront(frame);
            if (frames.Count >= maxQueueCount)
            {
                stats.CountFrameSkip();
                trashBuf = frames.RemoveBack();
            }
        }
        // lock内でPushしないのは、thisとbufferPoolの両方のlockを同時にとらないようにする配慮。
        if (trashBuf != null)
        {
            bufferPool.Push(trashBuf);
        }
    }