public void Process_memory_meter_should_throw_on_first_call_when_process_doesnt_exists()
        {
            var pid   = GetNonExistentProcessId();
            var meter = new ProcessMemoryMeter(pid);

            new Action(() => meter.GetMemoryInfo()).Should().ThrowExactly <InvalidOperationException>();
        }
 public void Process_memory_meter_fails_after_process_exit()
 {
     using (var testProcess = new TestProcessHandle())
         using (var meter = new ProcessMemoryMeter(testProcess.Process.Id))
         {
             testProcess.Dispose();
             new Action(() => meter.GetMemoryInfo()).Should().Throw <InvalidOperationException>();
         }
 }
 public void Does_not_throw()
 {
     using (var testProcess = new TestProcessHandle())
         using (var memMeter = new ProcessMemoryMeter(testProcess.Process.Id))
         {
             var memInfo = memMeter.GetMemoryInfo();
             Console.WriteLine(memInfo);
         }
 }
 private static void WinApi(Process target)
 {
     using (var meter = new ProcessMemoryMeter(target.Id))
     {
         for (var i = 0; i < N; ++i)
         {
             meter.GetMemoryInfo();
         }
     }
 }
        public void Process_memory_meter_works_for_private_memory()
        {
            using (var testProcess = new TestProcessHandle())
                using (var meter = new ProcessMemoryMeter(testProcess.Process.Id))
                {
                    var toEat     = DataSize.FromMegabytes(100);
                    var tolerance = DataSize.FromMegabytes(2);

                    var before = meter.GetMemoryInfo();
                    testProcess.EatPrivateMemory(toEat.Bytes);
                    var after = meter.GetMemoryInfo();

                    Console.WriteLine($"Before: ws {before.WorkingSetBytes} pb {before.PrivateBytes}");
                    Console.WriteLine($"After: ws {after.WorkingSetBytes} pb {after.PrivateBytes}");
                    Console.WriteLine($"Diff ws {after.WorkingSetBytes - before.WorkingSetBytes} pb {after.PrivateBytes - before.PrivateBytes}");

                    (after.WorkingSetBytes - before.WorkingSetBytes).Should().BeLessThan(tolerance.Bytes);
                    (after.PrivateBytes - before.PrivateBytes).Should().BeGreaterThan((toEat - tolerance).Bytes);
                }
        }