HeapProfiler.MainWindow.AutoCaptureTask C# (CSharp) Method

AutoCaptureTask() protected method

protected AutoCaptureTask ( ) : IEnumerator
return IEnumerator
        protected IEnumerator<object> AutoCaptureTask()
        {
            var sleep = new Sleep(0.1);

            while ((Instance == null) || (!Instance.Running))
                yield return sleep;

            sleep = new Sleep(CaptureCheckIntervalSeconds);

            const long captureInterval = (long)(CaptureMaxIntervalSeconds * Time.SecondInTicks);
            long lastPaged = 0, lastWorking = 0, lastCaptureWhen = 0;
            bool shouldCapture;

            while (AutoCapture.Checked && Instance.Running) {
                Instance.Process.Refresh();
                var pagedDelta = Math.Abs(Instance.Process.PagedMemorySize64 - lastPaged);
                var workingDelta = Math.Abs(Instance.Process.WorkingSet64 - lastWorking);
                var deltaPercent = Math.Max(
                    pagedDelta * 100 / Math.Max(Instance.Process.PagedMemorySize64, lastPaged),
                    workingDelta * 100 / Math.Max(Instance.Process.WorkingSet64, lastWorking)
                );
                var elapsed = Time.Ticks - lastCaptureWhen;

                shouldCapture = (deltaPercent >= CaptureMemoryChangeThresholdPercentage) ||
                    (elapsed > captureInterval);

                if (shouldCapture) {
                    lastPaged = Instance.Process.PagedMemorySize64;
                    lastWorking = Instance.Process.WorkingSet64;
                    lastCaptureWhen = Time.Ticks;
                    yield return Instance.CaptureSnapshot();
                }

                yield return sleep;
            }
        }
MainWindow