Skip to content

Commit 6937ce8

Browse files
committed
perf(client_handler): 优化内存使用和提升代码效率
- 将动态分配的字符数组改为栈上的固定大小数组,减少内存分配开销 - 移除不必要的 memset 调用,提高代码执行效率 - 简化事务中止时的处理逻辑,直接使用常量字符串替代动态构建
1 parent 8e99d4e commit 6937ce8

1 file changed

Lines changed: 5 additions & 11 deletions

File tree

src/rmdb.cpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ void *client_handler(void *sock_fd) {
141141
// 接收客户端发送的请求
142142
char data_recv[BUFFER_LENGTH];
143143
// 需要返回给客户端的结果
144-
char *data_send = new char[BUFFER_LENGTH];
144+
char data_send[BUFFER_LENGTH];
145145
// 需要返回给客户端的结果的长度
146146
int offset = 0;
147147
// 记录客户端当前正在执行的事务ID
@@ -155,8 +155,6 @@ void *client_handler(void *sock_fd) {
155155
while (true) {
156156
Print<true>("Waiting for request...\n");
157157

158-
// memset(data_recv, 0, BUFFER_LENGTH);
159-
160158
i_recvBytes = recv(fd, data_recv, BUFFER_LENGTH, 0);
161159
data_recv[i_recvBytes] = '\0';
162160

@@ -185,7 +183,6 @@ void *client_handler(void *sock_fd) {
185183
#ifdef ENABLE_SERIALIZE
186184
pthread_mutex_lock(sql_mutex);
187185
#endif
188-
memset(data_send, '\0', BUFFER_LENGTH);
189186
offset = 0;
190187

191188
// 开启事务,初始化系统所需的上下文信息(包括事务对象指针、锁管理器指针、日志管理器指针、存放结果的buffer、记录结果长度的变量)
@@ -206,10 +203,9 @@ void *client_handler(void *sock_fd) {
206203
portal.run(portalStmt, &txn_id, context.get());
207204
portal.drop();
208205
} catch (TransactionAbortException &e) {
209-
std::string str = "abort\n";
210-
memcpy(data_send, str.c_str(), str.length());
211-
data_send[str.length()] = '\0';
212-
offset = str.length();
206+
memcpy(data_send, "abort\n", 6);
207+
data_send[6] = '\0';
208+
offset = 6;
213209

214210
// 回滚事务
215211
txn_manager.abort(context.get());
@@ -222,7 +218,7 @@ void *client_handler(void *sock_fd) {
222218
if (sm_manager.is_output_file_) {
223219
std::fstream outfile;
224220
outfile.open("output.txt", std::ios::out | std::ios::app);
225-
outfile << str;
221+
outfile << "abort\n";
226222
outfile.close();
227223
}
228224
} catch (RMDBError &e) {
@@ -286,8 +282,6 @@ void *client_handler(void *sock_fd) {
286282
#endif
287283
}
288284

289-
delete[] data_send; // 释放动态分配的内存
290-
291285
yylex_destroy(scanner); // 销毁扫描器
292286

293287
// Clear

0 commit comments

Comments
 (0)