1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-06 03:53:50 +08:00

switch to buffer pool

This commit is contained in:
wdvxdr 2021-03-17 17:26:28 +08:00
parent ad260f6217
commit 41a67ca012
No known key found for this signature in database
GPG Key ID: 55FF1414A69CEBA6
2 changed files with 35 additions and 4 deletions

View File

@ -119,7 +119,8 @@ func (bot *CQBot) GetMessage(mid int32) MSG {
m := MSG{} m := MSG{}
data, err := bot.db.Get(binary.ToBytes(mid), nil) data, err := bot.db.Get(binary.ToBytes(mid), nil)
if err == nil { if err == nil {
buff := new(bytes.Buffer) buff := global.NewBuffer()
defer global.PutBuffer(buff)
buff.Write(binary.GZipUncompress(data)) buff.Write(binary.GZipUncompress(data))
err = gob.NewDecoder(buff).Decode(&m) err = gob.NewDecoder(buff).Decode(&m)
if err == nil { if err == nil {
@ -346,7 +347,8 @@ func (bot *CQBot) InsertGroupMessage(m *message.GroupMessage) int32 {
} }
id := toGlobalID(m.GroupCode, m.Id) id := toGlobalID(m.GroupCode, m.Id)
if bot.db != nil { if bot.db != nil {
buf := new(bytes.Buffer) buf := global.NewBuffer()
defer global.PutBuffer(buf)
if err := gob.NewEncoder(buf).Encode(val); err != nil { if err := gob.NewEncoder(buf).Encode(val); err != nil {
log.Warnf("记录聊天数据时出现错误: %v", err) log.Warnf("记录聊天数据时出现错误: %v", err)
return -1 return -1
@ -371,7 +373,8 @@ func (bot *CQBot) InsertPrivateMessage(m *message.PrivateMessage) int32 {
} }
id := toGlobalID(m.Sender.Uin, m.Id) id := toGlobalID(m.Sender.Uin, m.Id)
if bot.db != nil { if bot.db != nil {
buf := new(bytes.Buffer) buf := global.NewBuffer()
defer global.PutBuffer(buf)
if err := gob.NewEncoder(buf).Encode(val); err != nil { if err := gob.NewEncoder(buf).Encode(val); err != nil {
log.Warnf("记录聊天数据时出现错误: %v", err) log.Warnf("记录聊天数据时出现错误: %v", err)
return -1 return -1
@ -398,7 +401,8 @@ func (bot *CQBot) InsertTempMessage(target int64, m *message.TempMessage) int32
} }
id := toGlobalID(m.Sender.Uin, m.Id) id := toGlobalID(m.Sender.Uin, m.Id)
if bot.db != nil { if bot.db != nil {
buf := new(bytes.Buffer) buf := global.NewBuffer()
defer global.PutBuffer(buf)
if err := gob.NewEncoder(buf).Encode(val); err != nil { if err := gob.NewEncoder(buf).Encode(val); err != nil {
log.Warnf("记录聊天数据时出现错误: %v", err) log.Warnf("记录聊天数据时出现错误: %v", err)
return -1 return -1

27
global/buffer.go Normal file
View File

@ -0,0 +1,27 @@
package global
import (
"bytes"
"sync"
)
var bufferPool = sync.Pool{
New: func() interface{} {
return new(bytes.Buffer)
},
}
// NewBuffer 从池钟获取新 bytes.Buffer
func NewBuffer() *bytes.Buffer {
return bufferPool.Get().(*bytes.Buffer)
}
// PutBuffer 将 Buffer放入池中
func PutBuffer(buf *bytes.Buffer) {
// See https://golang.org/issue/23199
const maxSize = 1 << 16
if buf.Cap() < maxSize { // 对于大Buffer直接丢弃
buf.Reset()
bufferPool.Put(buf)
}
}