FBr*_*t87 5 .net c# apache-kafka confluent-platform
当使用 Confluent Kafka .NET 库从 Kafka 消费时,我们看到了巨大的内存泄漏。
我注意到的一件事是代码在没有 using 语句的情况下使用:
while (true)
{
if (_consumer.Consume(out Message<string, string> message, TimeSpan.FromMilliseconds(100)))
{
OnMessage(message);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,该 while 循环在应用程序的整个生命周期内运行,因此 .Dispose() 永远不会在消费时被调用。不会创建其他消费者实例。
由于库背后的代码是 C 语言,如果我们调用 GC.Collect() 会清除库创建的对象,还是垃圾收集器无法控制的非托管代码?
其他任何可能导致泄漏的事情,是否需要在某些时期或类似的时间调用 consumer.Close() ?
| 归档时间: |
|
| 查看次数: |
705 次 |
| 最近记录: |