【发布时间】:2020-07-20 10:48:49
【问题描述】:
var factory = new ConnectionFactory
{
HostName = "localhost",
UserName = "guest",
Password = "guest",
VirtualHost = "/",
RequestedHeartbeat = TimeSpan.FromMilliseconds(10),
AutomaticRecoveryEnabled = true,
TopologyRecoveryEnabled = true,
NetworkRecoveryInterval = TimeSpan.FromMilliseconds(500),
};
var connection = factory.CreateConnection();
for(int i = 0; i < 1000; ++i)
{
using (IModel channel = connection.CreateModel())
{
var arguments = new Dictionary<String, Object>
{
{"x-message-ttl", 60000},
{"x-max-length", 5000}
};
string exchangename = "oleg_exchange";
string queuename = "oleg_queue";
channel.ExchangeDeclare(exchangename, "direct", true, false, arguments);
channel.QueueDeclare(queuename, true, false, true, arguments);
channel.BasicQos(0, 1, false);
channel.QueueBind(queuename, exchangename, "receipt", arguments);
}
}
memory dump 在这里您可以看到 AutorecoveringModel 恰好创建了 5000 个对象,但必须销毁对象。
但是如果你关闭连接,那么一切都会被清除。
connection.Close();
这是正常行为吗?
【问题讨论】: