Просмотр исходного кода

Memory optimizations for direct mode

tags/v1.0.4^2
9seconds 6 лет назад
Родитель
Сommit
4ebae693e0
1 измененных файлов: 13 добавлений и 2 удалений
  1. 13
    2
      proxy/direct.go

+ 13
- 2
proxy/direct.go Просмотреть файл

13
 
13
 
14
 const directPipeBufferSize = 1024 * 1024
14
 const directPipeBufferSize = 1024 * 1024
15
 
15
 
16
+var (
17
+	directPipePool = sync.Pool{
18
+		New: func() interface{} {
19
+			rv := make([]byte, directPipeBufferSize)
20
+			return &rv
21
+		},
22
+	}
23
+)
24
+
16
 func directConnection(request *protocol.TelegramRequest) error {
25
 func directConnection(request *protocol.TelegramRequest) error {
17
 	telegramConnRaw, err := obfuscated2.TelegramProtocol(request)
26
 	telegramConnRaw, err := obfuscated2.TelegramProtocol(request)
18
 	if err != nil {
27
 	if err != nil {
42
 		wg.Done()
51
 		wg.Done()
43
 	}()
52
 	}()
44
 
53
 
45
-	buf := make([]byte, directPipeBufferSize)
46
-	if _, err := io.CopyBuffer(dst, src, buf); err != nil {
54
+	buf := directPipePool.Get().(*[]byte)
55
+	defer directPipePool.Put(buf)
56
+
57
+	if _, err := io.CopyBuffer(dst, src, *buf); err != nil {
47
 		logger.Debugw("Cannot pump sockets", "error", err)
58
 		logger.Debugw("Cannot pump sockets", "error", err)
48
 	}
59
 	}
49
 }
60
 }

Загрузка…
Отмена
Сохранить