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()); }
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(); }
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"); }