Improve: Reduce new / delete memory frequency in IOCPServer

This commit is contained in:
yuanyuanxiang
2025-11-30 21:20:04 +01:00
parent 9423eb42fc
commit 857bdd34bb
10 changed files with 350 additions and 186 deletions

View File

@@ -1,8 +1,8 @@
#pragma once
#pragma once
#include <Windows.h>
#include <string>
// Buffer <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD>.
// Buffer 带引用计数的缓存.
class Buffer
{
private:
@@ -82,7 +82,7 @@ public:
~CBuffer(void);
ULONG ReadBuffer(PBYTE Buffer, ULONG ulLength);
ULONG GetBufferLength(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
ULONG GetBufferLength(); // 返回有效数据长度
ULONG GetBufferLen()
{
return GetBufferLength();
@@ -104,11 +104,19 @@ public:
ULONG RemoveCompletedBuffer(ULONG ulLength);
std::string Skip(ULONG ulPos);
// 获取可直接写入的缓冲区指针,用于零拷贝接收
// 返回可写入的起始地址availableSize 返回可用空间大小
LPBYTE GetWriteBuffer(ULONG requiredSize, ULONG& availableSize);
// 确认写入完成,更新内部指针
VOID CommitWrite(ULONG writtenSize);
protected:
PBYTE m_Base;
PBYTE m_Ptr;
ULONG m_ulMaxLength;
ULONG m_ulReadOffset; // 读取偏移,用于延迟数据移动
CRITICAL_SECTION m_cs;
ULONG DeAllocateBuffer(ULONG ulLength); // ˽<EFBFBD><EFBFBD>
ULONG ReAllocateBuffer(ULONG ulLength); // ˽<EFBFBD><EFBFBD>
ULONG DeAllocateBuffer(ULONG ulLength); // 私有
ULONG ReAllocateBuffer(ULONG ulLength); // 私有
VOID CompactBuffer(); // 压缩缓冲区,移除已读取数据
};