Esempio n. 1
0
        public static void DisposingTheSharedPoolIsANop()
        {
            MemoryPool <int> mp = MemoryPool <int> .Shared;

            mp.Dispose();
            mp.Dispose();
            using (IMemoryOwner <int> block = mp.Rent(10))
            {
                Assert.True(block.Memory.Length >= 10);
            }
        }
Esempio n. 2
0
 void OnApplicationQuit()
 {
     bloodParticlePool.Dispose();
     bulletHolePool.Dispose();
     flarePool.Dispose();
     bulletCasingPool.Dispose();
 }
        public void MemoryPoolBlockReferenceTests()
        {
            var pool = new MemoryPool();

            BufferReferenceTests.TestOwnedBuffer(() => pool.Rent(1024), block => pool.Return((MemoryPoolBlock)block));
            pool.Dispose();
        }
Esempio n. 4
0
        public static void Run(int numberOfRequests, int concurrentConnections, byte[] requestPayload, Action <object, WritableBuffer> writeResponse)
        {
            var memoryPool = new MemoryPool();
            var listener   = new FakeListener(memoryPool, concurrentConnections);

            listener.OnConnection(async connection => {
                while (true)
                {
                    // Wait for data
                    var result           = await connection.Input.ReadAsync();
                    ReadableBuffer input = result.Buffer;

                    try
                    {
                        if (input.IsEmpty && result.IsCompleted)
                        {
                            // No more data
                            break;
                        }

                        var requestBytes = input.First;

                        if (requestBytes.Length != 492)
                        {
                            continue;
                        }
                        // Parse the input http request
                        // TODO: use the Kestrel parser here
                        object parsedRequest = null;

                        // Writing directly to pooled buffers
                        var output = connection.Output.Alloc();
                        writeResponse(parsedRequest, output);
                        await output.FlushAsync();
                    }
                    catch (Exception e)
                    {
                        var istr = new Utf8Span(input.First.Span).ToString();
                        Debug.WriteLine(e.Message);
                    }
                    finally
                    {
                        // Consume the input
                        connection.Input.Advance(input.End, input.End);
                    }
                }
            });

            var tasks = new Task[numberOfRequests];

            for (int i = 0; i < numberOfRequests; i++)
            {
                tasks[i] = listener.ExecuteRequestAsync(requestPayload);
            }

            Task.WaitAll(tasks);

            listener.Dispose();
            memoryPool.Dispose();
        }
Esempio n. 5
0
        public void Dispose()
        {
            Transport.Input.Complete();
            Transport.Output.Complete();

            MemoryPool.Dispose();
        }
Esempio n. 6
0
 // When application quit, Memory clear
 void OnApplicationQuit()
 {
     MPool1.Dispose();
     MPool2.Dispose();
     MPool3.Dispose();
     MPool4.Dispose();
 }
 protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         _memoryPool.Dispose();
     }
 }
 public void Cleanup()
 {
     _pair.Application.Input.Complete();
     _pair.Application.Output.Complete();
     _pair.Transport.Input.Complete();
     _pair.Transport.Output.Complete();
     _memoryPool.Dispose();
 }
Esempio n. 9
0
 // 게임이 종료되면 자동으로 호출되는 함수
 private void OnApplicationQuit()
 {
     // 메모리 풀을 비웁니다.
     if (MPool != null)
     {
         MPool.Dispose();
     }
 }
Esempio n. 10
0
 public void Dispose()
 {
     GC.Collect(); GC.Collect();
     GC.WaitForPendingFinalizers();
     _pipe.Writer.Complete();
     _pipe.Reader.Complete();
     _pool?.Dispose();
 }
Esempio n. 11
0
    public async ValueTask DisposeAsync()
    {
        await _host.StopAsync().ConfigureAwait(false);

        // The concrete Host implements IAsyncDisposable
        await((IAsyncDisposable)_host).DisposeAsync().ConfigureAwait(false);
        _memoryPool.Dispose();
    }
Esempio n. 12
0
 public void Dispose()
 {
     Application.Input.Complete();
     Application.Output.Complete();
     Transport.Input.Complete();
     Transport.Output.Complete();
     _memoryPool.Dispose();
 }
Esempio n. 13
0
 private void UnloadScene()
 {
     GameManager.instance.mainBGM.Play();
     GameManager.instance.Player.SetActive(true);
     Debug.Log("UnloadScene Call!");
     StonePool.Dispose();
     ParticlePool.Dispose();
     SceneManager.UnloadSceneAsync(SceneManager.GetSceneByName("MouseClickGame"));
 }
 void OnDisable()
 {
     ClearColliders(true);
     if (pool != null)
     {
         pool.Dispose();
         pool = null;
     }
 }
Esempio n. 15
0
        public static void RunSingleSegmentParser(int numberOfRequests, int concurrentConnections, byte[] requestPayload, WriteResponseDelegate writeResponse)
        {
            var memoryPool = new MemoryPool();
            var listener   = new FakeListener(new MemoryPool(), concurrentConnections);

            listener.OnConnection(async connection =>
            {
                while (true)
                {
                    // Wait for data
                    var result           = await connection.Input.ReadAsync();
                    ReadableBuffer input = result.Buffer;

                    try
                    {
                        if (input.IsEmpty && result.IsCompleted)
                        {
                            // No more data
                            break;
                        }

                        var requestBuffer = input.First;

                        if (requestBuffer.Length != 492)
                        {
                            continue;
                        }
                        // Parse the input http request
                        WritableBuffer output = WriteResponse(writeResponse, connection, requestBuffer);
                        await output.FlushAsync();
                    }
                    catch (Exception e)
                    {
                        var istr = new Utf8String(input.First.Span).ToString();
                        Debug.WriteLine(e.Message);
                    }
                    finally
                    {
                        // Consume the input
                        connection.Input.Advance(input.End, input.End);
                    }
                }
            });

            var tasks = new Task[numberOfRequests];

            for (int i = 0; i < numberOfRequests; i++)
            {
                tasks[i] = listener.ExecuteRequestAsync(requestPayload);
            }

            Task.WaitAll(tasks);

            listener.Dispose();
            memoryPool.Dispose();
        }
Esempio n. 16
0
        public override void Dispose()
        {
            _pair.Application.Input.Complete();
            _pair.Application.Output.Complete();
            _pair.Transport.Input.Complete();
            _pair.Transport.Output.Complete();
            _memoryPool.Dispose();

            base.Dispose();
        }
Esempio n. 17
0
        public void Dispose()
        {
            _transport.Input.Complete();
            _transport.Output.Complete();

            _application.Input.Complete();
            _application.Output.Complete();

            _pipelineFactory.Dispose();
        }
Esempio n. 18
0
        public void Dispose()
        {
            if (_disposed)
            {
                return;
            }

            _disposed = true;
            _connection?.Dispose();
            WriterPool?.Dispose();
        }
Esempio n. 19
0
        public void Dispose()
        {
            if (!_disposed)
            {
                _disposed = true;

                // This is a no-op for MemoryPool.Shared
                // See https://github.com/dotnet/corefx/blob/master/src/System.Memory/src/System/Buffers/ArrayMemoryPool.cs
                _pool.Dispose();
            }
        }
Esempio n. 20
0
        public void Dispose()
        {
            Assert.Empty(this.PeerManager.ChannelManager.GetAndClearPendingEvents(_pool));
            var networkGraph = this.PeerManager.GetNetworkGraph(_pool);
            var peerMan      = PeerManager.Create(NodeConfig.NodeSeed.ToBytes(), _testUserConfigProvider, NodeConfig.ChainMonitor, NodeConfig.TestLogger, NodeConfig.KeysManager.GetNodeSecret().ToBytes(), ChannelManager, BlockNotifier, 30000, networkGraph);

            Assert.Equal(networkGraph, peerMan.GetNetworkGraph(_pool));

            _pool.Dispose();
            PeerManager.Dispose();
        }
Esempio n. 21
0
        void IDisposable.Dispose()
        {
            base.Dispose();

            _transport.Input.Complete();
            _transport.Output.Complete();

            _application.Input.Complete();
            _application.Output.Complete();

            _pipelineFactory.Dispose();
        }
Esempio n. 22
0
        public void Dispose()
        {
            if (_disposed)
            {
                return;
            }

            _disposed = true;
            _connection?.Dispose();
            WriterPool?.Dispose();
            GC.SuppressFinalize(this);
        }
Esempio n. 23
0
 /// <summary>
 /// Releases all resources owned by the listener
 /// </summary>
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         GC.SuppressFinalize(this);
         _socket?.Dispose();
         _socket = null;
         if (_ownsPool)
         {
             _pool?.Dispose();
         }
         _pool = null;
     }
 }
Esempio n. 24
0
 private void DisposeAllPool()
 {
     foreach (var pool in EnemyWavePool)
     {
         //pool.AllDespawn();
         pool.Dispose();
     }
     foreach (var pool in GamePlayerMove.instance.throwObjectPool)
     {
         //pool.AllDespawn();
         pool.Dispose();
     }
     ParticlePool.Dispose();
 }
    void MemoryPoolDelete()
    {
        if (memoryPoolRight != null)
        {
            memoryPoolRight.Dispose();
        }
        if (memoryPoolLeft != null)
        {
            memoryPoolLeft.Dispose();
        }
        if (memoryPoolEffect != null)
        {
            memoryPoolEffect.Dispose();
        }

        if (LeftNote != null)
        {
            foreach (var o in LeftNote)
            {
                if (o != null)
                {
                    Destroy(o);
                }
            }
        }

        if (RightNote != null)
        {
            foreach (var o in RightNote)
            {
                if (o != null)
                {
                    Destroy(o);
                }
            }
        }

        if (Effect != null)
        {
            foreach (var o in Effect)
            {
                if (o != null)
                {
                    Destroy(o);
                }
            }
        }
    }
Esempio n. 26
0
    void MemoryPoolDelete()
    {
        memoryPoolRight.Dispose();
        memoryPoolLeft.Dispose();
        memoryPoolEffect.Dispose();
        foreach (var o in LeftNote)
        {
            Destroy(o);
        }

        foreach (var o in RightNote)
        {
            Destroy(o);
        }

        foreach (var o in Effect)
        {
            Destroy(o);
        }
    }
Esempio n. 27
0
        public async Task DisposeAsync()
        {
            if (!_disposed)
            {
                _disposed = true;
                _stopping = true;
                _output.Reader.CancelPendingRead();

                await Task.WhenAll(_sendTask, _receiveTask);

                _output.Writer.Complete();
                _input.Reader.Complete();

                _socket?.Dispose();
                _socket = null;
                if (_ownsPool)
                {
                    _pool?.Dispose();
                }
                _pool = null;
            }
        }
Esempio n. 28
0
 public void Close()
 {
     _allDone.WaitOne();
     _isStart = false;
     if (_useIOEvents != null)
     {
         try
         {
             Monitor.Enter(_useIOEvents);
             foreach (var c in _useIOEvents)
             {
                 (c.Value.UserToken as StateObject).Dispose();
                 c.Value.Dispose();
             }
         }
         finally
         {
             Monitor.Exit(_useIOEvents);
         }
     }
     _ioEventPool.Dispose();
     Close();
     _useIOEvents = null;
 }
Esempio n. 29
0
    protected override void Dispose(bool disposing)
    {
        if (IsDisposed)
        {
            MemoryPoolThrowHelper.ThrowInvalidOperationException_DoubleDispose();
        }

        bool allBlocksReturned = false;

        try
        {
            lock (_syncObj)
            {
                IsDisposed        = true;
                allBlocksReturned = _blocks.Count == 0;
                if (!allBlocksReturned && !_allowLateReturn)
                {
                    MemoryPoolThrowHelper.ThrowInvalidOperationException_DisposingPoolWithActiveBlocks(_totalBlocks - _blocks.Count, _totalBlocks, _blocks.ToArray());
                }

                if (_blockAccessExceptions.Count > 0)
                {
                    throw CreateAccessExceptions();
                }
            }
        }
        finally
        {
            if (allBlocksReturned)
            {
                SetAllBlocksReturned();
            }

            _pool.Dispose();
        }
    }
Esempio n. 30
0
        public void ServerPipeListenForConnections()
        {
            const string pipeName = @"\\.\pipe\ServerPipeListenForConnections";

            var loop             = new UvLoopHandle(_logger);
            var serverListenPipe = new UvPipeHandle(_logger);

            loop.Init(_uv);
            serverListenPipe.Init(loop, (a, b) => { }, false);
            serverListenPipe.Bind(pipeName);
            serverListenPipe.Listen(128, (backlog, status, error, state) =>
            {
                var serverConnectionPipe = new UvPipeHandle(_logger);
                serverConnectionPipe.Init(loop, (a, b) => { }, true);

                try
                {
                    serverListenPipe.Accept(serverConnectionPipe);
                }
                catch (Exception)
                {
                    serverConnectionPipe.Dispose();
                    return;
                }

                var writeRequest = new UvWriteReq(new KestrelTrace(new TestKestrelTrace()));
                writeRequest.Init(loop);

                var pool  = new MemoryPool();
                var block = pool.Lease();
                block.GetIterator().CopyFrom(new ArraySegment <byte>(new byte[] { 1, 2, 3, 4 }));

                var start = new MemoryPoolIterator(block, 0);
                var end   = new MemoryPoolIterator(block, block.Data.Count);
                writeRequest.Write(
                    serverConnectionPipe,
                    start,
                    end,
                    1,
                    (handle, status2, error2, state2) =>
                {
                    writeRequest.Dispose();
                    serverConnectionPipe.Dispose();
                    serverListenPipe.Dispose();
                    pool.Return(block);
                    pool.Dispose();
                },
                    null);
            }, null);

            var worker = new Thread(() =>
            {
                var loop2 = new UvLoopHandle(_logger);
                var clientConnectionPipe = new UvPipeHandle(_logger);
                var connect = new UvConnectRequest(new KestrelTrace(new TestKestrelTrace()));

                loop2.Init(_uv);
                clientConnectionPipe.Init(loop2, (a, b) => { }, true);
                connect.Init(loop2);
                connect.Connect(clientConnectionPipe, pipeName, (handle, status, error, state) =>
                {
                    var buf = loop2.Libuv.buf_init(Marshal.AllocHGlobal(8192), 8192);
                    connect.Dispose();

                    clientConnectionPipe.ReadStart(
                        (handle2, cb, state2) => buf,
                        (handle2, status2, state2) =>
                    {
                        if (status2 == Constants.EOF)
                        {
                            clientConnectionPipe.Dispose();
                        }
                    },
                        null);
                }, null);
                loop2.Run();
                loop2.Dispose();
            });

            worker.Start();
            loop.Run();
            loop.Dispose();
            worker.Join();
        }