示例#1
0
 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
     {
     }
 }
示例#2
0
 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
     {
     }
 }
示例#3
0
    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)));
            }
        }
    }
示例#4
0
 public OutputTask(IOutputAction <T> action, ILogger logger)
 {
     Action = action;
     Logger = logger;
 }
示例#5
0
 private static IResult ActionImplStrategy(IOutputAction output, OutputResultData result)
 => output == null
         ? OutputResult.NullResult
         : output.Execute(result);
示例#6
0
 /// <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);