Пример #1
0
        void CalculateValueStats(int fromIdx, int toIdx, IEnumerable <string> restrictToViewPaths)
        {
            int                numTasks      = 32;
            int                numValueStats = m_valueStats.Count;
            int                segmentSize   = (numValueStats / numTasks) + 1;
            MTCounter          counter       = new MTCounter(numValueStats);
            GetValuesFromIndex perViewVFI    = i => m_baseViewFRs[i].Values;
            GetValuesFromIndex perLogVFI     = i => m_baseLogData.FrameRecords[i].Values;

            for (int i = 0; i < numTasks; ++i)
            {
                int start = i * segmentSize;
                int end   = Math.Min(start + segmentSize, numValueStats);

                if (start >= end)
                {
                    break;
                }

                ThreadPool.QueueUserWorkItem((o) =>
                {
                    for (int j = start; j < end; ++j)
                    {
                        string path = m_valueStats.Keys[j];

                        if (restrictToViewPaths != null && !restrictToViewPaths.Contains(path))
                        {
                            continue;
                        }

                        ValueStats valueStats            = m_valueStats.Values[j];
                        IReadOnlyFRPC paths              = valueStats.m_bValueIsPerLogView ? m_viewPaths : m_dataPaths;
                        GetValuesFromIndex valuesFromIdx = valueStats.m_bValueIsPerLogView ? perViewVFI : perLogVFI;
                        CalcSingleValueStat(valueStats, paths.GetIndexFromPath(path), fromIdx, toIdx, valuesFromIdx);
                    }

                    counter.Increment(end - start);
                }
                                             );
            }

            counter.WaitUntilMax();
        }
Пример #2
0
        static void CalcSingleValueStat(ValueStats valueStats, int path, int fromIdx, int toIdx, GetValuesFromIndex valuesFromIdx)
        {
            for (int i = fromIdx; i <= toIdx; i++)
            {
                IReadOnlyFRVs values = valuesFromIdx(i);

                if (values.ContainsPath(path))
                {
                    valueStats.Update(values[path]);
                }
            }
        }