diff --git a/opentelemetry/benches/metrics.rs b/opentelemetry/benches/metrics.rs
index 9fc142cdb4..6f2102536e 100644
--- a/opentelemetry/benches/metrics.rs
+++ b/opentelemetry/benches/metrics.rs
@@ -1,4 +1,19 @@
-use criterion::{criterion_group, criterion_main, Criterion};
+/*
+    Benchmark Results:
+    criterion = "0.5.1"
+    OS: Ubuntu 22.04.4 LTS (5.15.153.1-microsoft-standard-WSL2)
+    Hardware: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz, 16vCPUs,
+    RAM: 64.0 GB
+    | Test                                                | Average time|
+    |-----------------------------------------------------|-------------|
+    | NoAttributes                                        | 1.1616 ns   |
+    | AddWithInlineStaticAttributes                       | 13.296 ns   |
+    | AddWithStaticArray                                  | 1.1612 ns   |
+    | AddWithDynamicAttributes                            | 110.40 ns   |
+    | AddWithDynamicAttributes_WithStringAllocation       | 77.338 ns   |
+*/
+
+use criterion::{black_box, criterion_group, criterion_main, BatchSize, Criterion};
 use opentelemetry::{global, metrics::Counter, KeyValue};
 
 // Run this benchmark with:
@@ -17,13 +32,13 @@ fn criterion_benchmark(c: &mut Criterion) {
 fn counter_add(c: &mut Criterion) {
     let counter = create_counter();
 
-    c.bench_function("Counter_NoAttributes", |b| {
+    c.bench_function("NoAttributes", |b| {
         b.iter(|| {
             counter.add(1, &[]);
         });
     });
 
-    c.bench_function("Counter_AddWithInlineStaticAttributes", |b| {
+    c.bench_function("AddWithInlineStaticAttributes", |b| {
         b.iter(|| {
             counter.add(
                 1,
@@ -44,22 +59,46 @@ fn counter_add(c: &mut Criterion) {
         KeyValue::new("attribute4", "value4"),
     ];
 
-    c.bench_function("Counter_AddWithStaticArray", |b| {
+    c.bench_function("AddWithStaticArray", |b| {
         b.iter(|| {
             counter.add(1, &kv);
         });
     });
 
-    c.bench_function("Counter_AddWithDynamicAttributes", |b| {
+    c.bench_function("AddWithDynamicAttributes", |b| {
+        b.iter_batched(
+            || {
+                let value1 = "value1".to_string();
+                let value2 = "value2".to_string();
+                let value3 = "value3".to_string();
+                let value4 = "value4".to_string();
+
+                (value1, value2, value3, value4)
+            },
+            |values| {
+                let kv = &[
+                    KeyValue::new("attribute1", values.0),
+                    KeyValue::new("attribute2", values.1),
+                    KeyValue::new("attribute3", values.2),
+                    KeyValue::new("attribute4", values.3),
+                ];
+
+                counter.add(1, kv);
+            },
+            BatchSize::SmallInput,
+        );
+    });
+
+    c.bench_function("AddWithDynamicAttributes_WithStringAllocation", |b| {
         b.iter(|| {
-            let kv = vec![
-                KeyValue::new("attribute1", "value1"),
-                KeyValue::new("attribute2", "value2"),
-                KeyValue::new("attribute3", "value3"),
-                KeyValue::new("attribute4", "value4"),
+            let kv = &[
+                KeyValue::new("attribute1", black_box("value1".to_string())),
+                KeyValue::new("attribute2", black_box("value2".to_string())),
+                KeyValue::new("attribute3", black_box("value3".to_string())),
+                KeyValue::new("attribute4", black_box("value4".to_string())),
             ];
 
-            counter.add(1, &kv);
+            counter.add(1, kv);
         });
     });
 }