/// <summary> /// ExecuteAsync /// </summary> /// <param name="context"></param> /// <param name="cancellationToken"></param> /// <returns></returns> protected override async Task <Action <AsyncCodeActivityContext> > ExecuteAsync(AsyncCodeActivityContext context, CancellationToken cancellationToken) { // Inputs var process = Process.Get(context); var ret = MonitorProcess.GetMonitoredValue(process); ulong[] eachCpu = { ret[MonitorItem.SystemEachCpu00to07], ret[MonitorItem.SystemEachCpu08to15], ret[MonitorItem.SystemEachCpu16to23], ret[MonitorItem.SystemEachCpu24to31] }; int cpuCount = Environment.ProcessorCount; if (cpuCount > MonitorProcess.MAX_CPU_COUNT) { cpuCount = MonitorProcess.MAX_CPU_COUNT; } float[] eachCpuArray = new float[cpuCount]; for (int i = 0; i < cpuCount; i++) { ulong cpuValue = eachCpu[i >> 2]; eachCpuArray[i] = (float)(cpuValue & 0xFF); eachCpu[i >> 2] = eachCpu[i >> 2] >> 8; } // Outputs return((ctx) => { RawValue.Set(ctx, ret); SystemTotalCpu.Set(ctx, (float)ret[MonitorItem.SystemTotalCpu] / 100F); SystemTotalCpuMA.Set(ctx, (float)ret[MonitorItem.SystemTotalCpuMA] / 100F); SystemEachCpu.Set(ctx, eachCpuArray); SystemTotalPhysicalMemory.Set(ctx, ret[MonitorItem.SystemTotalPhysicalMemory]); SystemAvailablePhisycalMemory.Set(ctx, ret[MonitorItem.SystemAvailablePhisycalMemory]); SystemTotalVirtualMemory.Set(ctx, ret[MonitorItem.SystemTotalVirtualMemory]); SystemAvilableVirtualMemory.Set(ctx, ret[MonitorItem.SystemAvilableVirtualMemory]); ProcessWorkingSet.Set(ctx, ret[MonitorItem.ProcessWorkingSet]); ProcessWorkingSetMA.Set(ctx, ret[MonitorItem.ProcessWorkingSetMA]); ProcessPrivateMemorySize.Set(ctx, ret[MonitorItem.ProcessPrivateMemorySize]); ProcessPrivateMemorySizeMA.Set(ctx, ret[MonitorItem.ProcessPrivateMemorySizeMA]); ProcessTotalManagedMemory.Set(ctx, ret[MonitorItem.ProcessTotalManagedMemory]); ProcessTotalProcessorTime.Set(ctx, ret[MonitorItem.ProcessTotalProcessorTime]); ProcessTotalProcessorTimeDelta.Set(ctx, ret[MonitorItem.ProcessTotalProcessorTimeDelta]); ProcessResponding.Set(ctx, ret[MonitorItem.ProcessResponding] != 0 ? true : false); ProcessRespondingCount.Set(ctx, (int)ret[MonitorItem.ProcessRespondingCount]); }); }