/// <summary> /// Creates a collection with the specified number of counters. Each counter in <c>[0, numberOfCounters - 1]</c> /// may be accessed with <see cref="AddToCounterInternal"/> or <see cref="GetCounterValueInternal"/>. /// </summary> internal CounterCollection(ushort numberOfCounters, CounterCollection parent = null) { Contract.Requires(numberOfCounters > 0); // Round up the per-processor 'row' size to cache line size. Since m_counters is row-major, // this means that the processor rows are cache-aligned and so processors do not share cache lines. int valuesPerProcessor = ((int)numberOfCounters + (ValuesPerCacheLine - 1)) & ~(ValuesPerCacheLine - 1); m_counters = new long[AssumedLogicalProcessorCount, valuesPerProcessor]; m_durations = new long[AssumedLogicalProcessorCount, valuesPerProcessor]; m_parent = parent; }
/// <summary> /// Copy constructor. /// </summary> internal CounterCollection(CounterCollection collectionToClone) : this(collectionToClone.m_counters, collectionToClone.m_durations, collectionToClone.m_parent) { }
private CounterCollection(long[,] counters, long[,] durations, CounterCollection parent) { m_counters = (long[, ])counters.Clone(); m_durations = (long[, ])durations.Clone(); m_parent = parent; }
/// <nodoc /> internal Counter(CounterCollection collection, ushort id, CounterType counterType) { m_collection = collection; m_id = id; m_counterType = counterType; }