Esempio n. 1
0
        public void PushToTheLimit()
        {
            var queue    = new ConcurrentQueue <object>();
            var executor = new ParallelWorkExecutor(() =>
            {
                MemoryLimiter.Wait();
                queue.Enqueue(Enumerable.Range(0, 1000).Select(i => Guid.NewGuid()).ToArray());
                Thread.Sleep(1);
            }, () => false, Environment.ProcessorCount);

            executor.Start();

            while (MemoryLimiter.IsEnoughMemory())
            {
                Thread.Sleep(1);
            }
            Thread.Sleep(1000);
            var count = queue.Count;

            executor.Cancell(false);
            Assert.AreEqual(count, queue.Count, Environment.ProcessorCount * 2);
            while (queue.Count > 0)
            {
                queue.Dequeue();
            }
            Assert.IsTrue(MemoryLimiter.IsEnoughMemory());
        }
Esempio n. 2
0
        public static void Main(string[] args)
        {
            var t = new Thread(() =>
            {
                var limit = 64.Mb();
                MemoryLimiter.LimitCommittedMemory(limit);

                var list = new List <byte[]>();
                while (MemoryMeter.PrivateBytes() < limit - 128.Kb())
                {
                    list.Add(new byte[4096]);
                }
                try
                {
                    F(0);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }

                GC.KeepAlive(list);
            }); // , 4 * 1024 * 1024);

            t.Start();
            t.Join();
        }
Esempio n. 3
0
        public static void Run()
        {
            MemoryLimiter.LimitCommittedMemory(64.Mb());

            var list = new List <byte[]>();

            try
            {
                while (true)
                {
                    list.Add(new byte[100000]);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("in catch block...");
                Console.WriteLine(e);
            }
            Console.WriteLine("OOM handled");
        }