private void WriteMetricMetadataIndex(BinaryWriter writer, IMetricMetadata value)
        {
            uint index;

            if (!this.metadataIndexes.TryGetValue(value, out index))
            {
                index = this.nextMetadataIndex++;
                this.metadataIndexes.Add(value, index);
                this.metadatas.Add(value);

                if (this.estimatePacketSize)
                {
                    // In versions 0-2 Metric Namespace was part of the Metric data, from version 3 it became a part of Metric Metadata
                    if (this.version >= 3)
                    {
                        this.currentMetadataDictionaryBlockSize += SerializationUtils.EstimateUInt32InBase128Size(this.RegisterString(value.MetricNamespace));
                    }

                    this.currentMetadataDictionaryBlockSize += SerializationUtils.EstimateUInt32InBase128Size(this.RegisterString(value.MetricName));
                    this.currentMetadataDictionaryBlockSize += SerializationUtils.EstimateUInt32InBase128Size((uint)value.DimensionsCount);
                    for (int i = 0; i < value.DimensionsCount; ++i)
                    {
                        this.currentMetadataDictionaryBlockSize += SerializationUtils.EstimateUInt32InBase128Size(this.RegisterString(value.GetDimensionName(i)));
                    }
                }
            }

            SerializationUtils.WriteUInt32AsBase128(writer, index);
        }
        private void WriteMetricMetadata(BinaryWriter writer, IMetricMetadata value)
        {
            // In versions 0-2 Metric Namespace was part of the Metric data, from version 3 it became a part of Metric Metadata
            if (this.version >= 3)
            {
                SerializationUtils.WriteUInt32AsBase128(writer, this.RegisterString(value.MetricNamespace));
            }

            SerializationUtils.WriteUInt32AsBase128(writer, this.RegisterString(value.MetricName));
            SerializationUtils.WriteUInt32AsBase128(writer, (uint)value.DimensionsCount);
            for (var i = 0; i < value.DimensionsCount; ++i)
            {
                SerializationUtils.WriteUInt32AsBase128(writer, this.RegisterString(value.GetDimensionName(i)));
            }
        }