Exemplo n.º 1
0
        /// <summary>
        /// <paramref name="step"/>이 있는 for loop 를 병렬 수행합니다.	for(i=fromInclusive; i &lt; toExclusive; i+=step)
        /// </summary>
        /// <param name="fromInclusive">loop 하한 인덱스</param>
        /// <param name="toExclusive">loop 상한 인덱스</param>
        /// <param name="step">반복 인덱스 Step</param>
        /// <param name="parallelOptions">병렬 옵션</param>
        /// <param name="localInit">로컬 변수값 초기화</param>
        /// <param name="body">로컬값을 반환하는 병렬 실행할 함수</param>
        /// <param name="localFinally">최종 로컬 정리 action</param>
        /// <returns>/실행 결과</returns>
        public static ParallelLoopResult ForWithStep <T>(int fromInclusive, int toExclusive, int step,
                                                         ParallelOptions parallelOptions,
                                                         Func <T> localInit,
                                                         Func <int, ParallelLoopState, T, T> body,
                                                         Action <T> localFinally)
        {
            step.ShouldBePositive("step");

            if (step == 1)
            {
                return(Parallel.For(fromInclusive, toExclusive, localInit, body, localFinally));
            }

            if (IsDebugEnabled)
            {
                log.Debug("Step을 가진 For Loop를 병렬 수행합니다... fromInclusive=[{0}], toExclusive=[{1}], step=[{2}]",
                          fromInclusive, toExclusive, step);
            }

            var ranges = EnumerableTool.Step(fromInclusive, toExclusive, step);

            return(Parallel.ForEach(ranges,
                                    parallelOptions,
                                    localInit,
                                    (i, loolState, local) => body(i, loolState, local),
                                    local => localFinally(local)));
        }
Exemplo n.º 2
0
        private void BuildExpressionGraph(SingleSeriesChart chart)
        {
            var expr = new NCalc.Expression(Expression, EvaluateOptions.IgnoreCase | EvaluateOptions.IterateParameters);

            var step = (Upper - Lower) / VarCount;

            var x = EnumerableTool.Step(Lower, Upper, step).ToArray();

            expr.Parameters["x"] = x;

            var y = ((IEnumerable)expr.Evaluate()).ToListUnsafe <double>();

            for (var i = 0; i < x.Length; i++)
            {
                chart.SetElements.Add(new ValueSetElement(y[i])
                {
                    Label = x[i].ToString("#.0")
                });
            }
        }