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;
}
}