summaryrefslogtreecommitdiff
path: root/internal/io/pool
diff options
context:
space:
mode:
Diffstat (limited to 'internal/io/pool')
-rw-r--r--internal/io/pool/builder.go21
-rw-r--r--internal/io/pool/bytesbuffer.go22
2 files changed, 43 insertions, 0 deletions
diff --git a/internal/io/pool/builder.go b/internal/io/pool/builder.go
new file mode 100644
index 0000000..89fcf81
--- /dev/null
+++ b/internal/io/pool/builder.go
@@ -0,0 +1,21 @@
+package pool
+
+import (
+ "strings"
+ "sync"
+)
+
+// BuilderBuffer is there to optimize memory allocations (DTail allocates a lot
+// of memory while reading log data otherwise)
+var BuilderBuffer = sync.Pool{
+ New: func() interface{} {
+ sb := strings.Builder{}
+ return &sb
+ },
+}
+
+// RecycleBuilderBuffer recycles the buffer again.
+func RecycleBuilderBuffer(sb *strings.Builder) {
+ sb.Reset()
+ BuilderBuffer.Put(sb)
+}
diff --git a/internal/io/pool/bytesbuffer.go b/internal/io/pool/bytesbuffer.go
new file mode 100644
index 0000000..3d48f2c
--- /dev/null
+++ b/internal/io/pool/bytesbuffer.go
@@ -0,0 +1,22 @@
+package pool
+
+import (
+ "bytes"
+ "sync"
+)
+
+// BytesBuffer is there to optimize memory allocations. DTail otherwise allocates
+// a lot of memory while reading logs.
+var BytesBuffer = sync.Pool{
+ New: func() interface{} {
+ b := bytes.Buffer{}
+ b.Grow(128)
+ return &b
+ },
+}
+
+// RecycleBytesBuffer recycles the buffer again.
+func RecycleBytesBuffer(b *bytes.Buffer) {
+ b.Reset()
+ BytesBuffer.Put(b)
+}