缓冲区与字符串速度:为什么字符串更快?

我有一个名为Memcached.Js的项目,它是Memcached服务器到Node.js的端口。

我一直在使用字符串和缓冲区进行比较,比较内存占用量和性能。对于内存,毫无疑问,缓冲区是正确的选择。

但令我惊讶的是,表演并非如此。执行字符串操作比使用缓冲区更快。这是我尝试的:

// Option 1: data.toString() - amazing, but it's the best one

var commandDataStr = mdata.data.toString().substr(startPos, bytes);

var commandData = new Buffer(commandDataStr);

// Option 2: data.slice().toString() - the same as above... What?

var commandDataStr = mdata.data.slice(startPos, startPos + bytes).toString();

var commandData = new Buffer(commandDataStr);

// Option 3: data.slice() - bad

var commandData = mdata.data.slice(startPos, startPos + bytes);

// Option 4: data.copy() - bad as well

var commandData = new Buffer(bytes);

mdata.data.copy(commandData, 0, startPos, startPos + bytes);

完整的代码在这里:https

:

//github.com/dalssoft/memcached.js/blob/master/lib/memcached.ascii.commands.js#L72

测试代码: ruby test/from_clients/perf_test.rb

测试表明,字符串比Buffer更快。由于这不是我所期望的,因此我认为我可能做错了什么,但我找不到确切的意思。

有人能帮我一下吗?

Tks!

回答:

字符串是V8内置的,并在VM中分配内存。添加缓冲区不是为了使所有字符串操作更快,而是代表二进制数据,其中字符串是unicode。

将大量数据写入套接字时,以二进制格式存储数据要比从Unicode转换要高效得多。

因此,对于诸如concat之类的常见操作,我并不惊讶字符串速度更快。

以上是 缓冲区与字符串速度:为什么字符串更快? 的全部内容, 来源链接: utcz.com/qa/403791.html

回到顶部