public void Init(IOData data) { outputData = data; strDriverName = data.Name; try { if (HardwareManage.dicHardwareDriver[data.CardName] is IOutputAction) { actionOutput = (IOutputAction)HardwareManage.dicHardwareDriver[data.CardName]; strRemark = data.Remark; bready = true; } } catch { } }
public void Init(OutputData data) { ioData = data; strDriverName = data.OutputCardName; try { if (HardwareManage.hardwardDictionary[ioData.OutputCardName] is IOutputAction) { actionOutput = (IOutputAction)HardwareManage.hardwardDictionary[ioData.OutputCardName]; iOutputNo = ioData.iOutputNo; bIgnore = ioData.bignore; strRemark = ioData.strRemark; bready = true; } } catch { } }
public static void Time(string name, int iteration, IAction action, IOutputAction actionOut, bool outProbability = false) { if (String.IsNullOrEmpty(name)) { return; } if (action == null) { return; } //1. Print name actionOut.WriteLine(name); // 2. Record the latest GC counts //GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); GC.Collect(GC.MaxGeneration); int[] gcCounts = new int[GC.MaxGeneration + 1]; for (int i = 0; i <= GC.MaxGeneration; i++) { gcCounts[i] = GC.CollectionCount(i); } // 3. Run action Stopwatch watch = new Stopwatch(); watch.Start(); long ticksFst = GetCurrentThreadTimes(); //100 nanosecond one tick Dictionary <object, int> dicProbability = new Dictionary <object, int>(); if (outProbability == true) { object v = null; for (int i = 0; i < iteration; i++) { v = action.Execute(i); if (v != null) { if (dicProbability.ContainsKey(v)) { dicProbability[v] += 1; } else { dicProbability.Add(v, 1); } } } } else { for (int i = 0; i < iteration; i++) { action.Execute(i); } } long ticks = GetCurrentThreadTimes() - ticksFst; watch.Stop(); // 4. Print CPU actionOut.WriteLine("\tTime Elapsed:\t\t" + watch.ElapsedMilliseconds.ToString("N0") + "ms"); actionOut.WriteLine("\tTime Elapsed (one time):" + (watch.ElapsedMilliseconds / iteration).ToString("N0") + "ms"); actionOut.WriteLine("\tCPU time:\t\t" + (ticks * 100).ToString("N0") + "ns"); actionOut.WriteLine("\tCPU time (one time):\t" + (ticks * 100 / iteration).ToString("N0") + "ns"); // 5. Print GC for (int i = 0; i <= GC.MaxGeneration; i++) { int count = GC.CollectionCount(i) - gcCounts[i]; actionOut.WriteLine("\tGen " + i + ": \t\t\t" + count); } // 6. Print probility if (outProbability == true) { actionOut.WriteLine("\tRandCount : \t\t" + dicProbability.Count); foreach (var item in dicProbability) { actionOut.WriteLine(item.Key.ToString() + "\t\tRandItem : \t\t" + item.Value + "\t\tProbability : \t\t" + Math.Round((double)(item.Value / dicProbability.Count))); } } }
public OutputTask(IOutputAction <T> action, ILogger logger) { Action = action; Logger = logger; }
private static IResult ActionImplStrategy(IOutputAction output, OutputResultData result) => output == null ? OutputResult.NullResult : output.Execute(result);
/// <summary> /// Executes specified action for this output result instance. /// </summary> /// <param name="output">Target output result.</param> /// <returns> /// <para> /// An instance which implements the <see cref="IResult"/> interface that contains the result of the operation, to check if the operation is correct, the <b>Success</b> /// property will be <b>true</b> and the <b>Value</b> property will contain the value; Otherwise, the the <b>Success</b> property /// will be false and the <b>Errors</b> property will contain the errors associated with the operation, if they have been filled in. /// </para> /// </returns> public IResult Action(IOutputAction output) => ActionImplStrategy(output, this);