写了一个只从客户端读取数据的服务器:
使用boost :: array buffer
启动服务器和系统监视器显示1MB的使用情况.
1.)只需执行async_read_some并执行handleRead,我再次调用asyncRead函数.
void asyncRead() {
m_socket->async_read_some(
boost::asio::buffer(m_readBuffer, READ_BLOCK_SIZE),
m_strand->wrap(boost::bind(&ConnectionHandler::handleRead,
shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred))
);
}
Run Code Online (Sandbox Code Playgroud)
在handleRead我验证是否有任何错误,如果没有,我只是发出另一个asyncRead().
2.)保持发送帧(大小约102字节的数据).
在10000帧的测试结束时.总发送大小= 102*10000总读取大小= 102*10000
但是,系统监视器中的内存使用量高达7.8 Mb.
无法弄清楚这种增加的原因.尝试的不同方面是:1.)正在进行的连接数量 - 仅1. 2.)已验证关闭连接 - 是的.3.)甚至停止了ioServic,但仍然没有变化.
在客户端的第二次运行中,我看到内存在增加.可能是这样的?我使用的是boost :: array,这是一个堆栈变量,只是阅读.没有其他地方有一个缓冲区被初始化.
在MongoDb Shell中
db.keyword.update({"state":"UT"}, {$unset:{'abc.def':1}});
Run Code Online (Sandbox Code Playgroud)
unsets从abc中删除def.但是,如果我这样做:
var key = 'def'
var key1 = 'abc.'+key
db.keyword.update({"state":"UT"}, {$unset:{key1:1}});
Run Code Online (Sandbox Code Playgroud)
并没有取消def.
如何通过传递key1来取消设置"abc.def"?
试图计算得分并将其维持在0.2到1.5之间.以下代码是否有效?我不希望它返回,但继续进一步.
ok = if
Score > 1.5 ->
Score = 1.5;
true ->
ok
end,
ok = if
Score < 0.2 ->
Score = 0.2;
true ->
ok
end,
put(score, Score),
Run Code Online (Sandbox Code Playgroud)