mirror of
https://github.com/Mrs4s/go-cqhttp.git
synced 2025-05-05 19:43:49 +08:00
switch to buffer pool
This commit is contained in:
parent
ad260f6217
commit
41a67ca012
12
coolq/bot.go
12
coolq/bot.go
@ -119,7 +119,8 @@ func (bot *CQBot) GetMessage(mid int32) MSG {
|
||||
m := MSG{}
|
||||
data, err := bot.db.Get(binary.ToBytes(mid), nil)
|
||||
if err == nil {
|
||||
buff := new(bytes.Buffer)
|
||||
buff := global.NewBuffer()
|
||||
defer global.PutBuffer(buff)
|
||||
buff.Write(binary.GZipUncompress(data))
|
||||
err = gob.NewDecoder(buff).Decode(&m)
|
||||
if err == nil {
|
||||
@ -346,7 +347,8 @@ func (bot *CQBot) InsertGroupMessage(m *message.GroupMessage) int32 {
|
||||
}
|
||||
id := toGlobalID(m.GroupCode, m.Id)
|
||||
if bot.db != nil {
|
||||
buf := new(bytes.Buffer)
|
||||
buf := global.NewBuffer()
|
||||
defer global.PutBuffer(buf)
|
||||
if err := gob.NewEncoder(buf).Encode(val); err != nil {
|
||||
log.Warnf("记录聊天数据时出现错误: %v", err)
|
||||
return -1
|
||||
@ -371,7 +373,8 @@ func (bot *CQBot) InsertPrivateMessage(m *message.PrivateMessage) int32 {
|
||||
}
|
||||
id := toGlobalID(m.Sender.Uin, m.Id)
|
||||
if bot.db != nil {
|
||||
buf := new(bytes.Buffer)
|
||||
buf := global.NewBuffer()
|
||||
defer global.PutBuffer(buf)
|
||||
if err := gob.NewEncoder(buf).Encode(val); err != nil {
|
||||
log.Warnf("记录聊天数据时出现错误: %v", err)
|
||||
return -1
|
||||
@ -398,7 +401,8 @@ func (bot *CQBot) InsertTempMessage(target int64, m *message.TempMessage) int32
|
||||
}
|
||||
id := toGlobalID(m.Sender.Uin, m.Id)
|
||||
if bot.db != nil {
|
||||
buf := new(bytes.Buffer)
|
||||
buf := global.NewBuffer()
|
||||
defer global.PutBuffer(buf)
|
||||
if err := gob.NewEncoder(buf).Encode(val); err != nil {
|
||||
log.Warnf("记录聊天数据时出现错误: %v", err)
|
||||
return -1
|
||||
|
27
global/buffer.go
Normal file
27
global/buffer.go
Normal 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)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user