• 那些.NET中的连接池


    前言

    在.NET中,连接池被广泛用于管理和优化不同类型资源的连接。连接池可以减少建立和关闭连接所需的时间和资源消耗,从而提高了应用程序的性能和响应能力。

    HttpClient中的连接池

    System.Net.Http.HttpClient 类用于发送 HTTP 请求以及从 URI 所标识的资源接收 HTTP 响应。 每个HttpClient 实例使用自身的连接池,当实例被释放时,连接一会一同被释放,所以为了缓解端口耗尽问题,应该尽量重用HttpClient实例。

    我们可以控制HttpClient中的connection pool的行为

    • PooledConnectionLifetime 指的是当连接处于池中时保持活动状态的时间长度。一旦这个生命周期到期,该连接将不再被保留在池中或用于未来的请求。默认为Infinite

    • PooledConnectionIdleTimeout 定义了空闲连接在未被使用时在连接池中保持的时间长度。一旦这个生命周期到期,空闲的连接将被清除并从池中移除。默认为两分钟

    • MaxConnectionsPerServer 定义了每个端点将建立的最大出站连接数。每个端点的连接分别进行池化。例如,如果最大连接数的值是2,而你的应用程序向www.github.com和www.google.com发送请求,则总共可能会有最多4个开放的连接。默认值为Int.MaxValue

    DB连接池

    DB连接池大家都耳熟能详了,在这里就不必赘述细节了,主要注意以下几点:

    • 选择合适的Package, 比如针对MongoDB有很多连接方式,但是某些方式并没有连接池,当技术选型时,一定要选择正确的package。

    • 每个connection string对应一个连接池

    • 连接池有最大限制,sql server的最大连接默认为100

    Redis连接池

    在.NET中,大家都使用StackExchange.Redis来连接Redis,但是此Client Library并没有Pool,大家可以考虑使用额外的第三方类库比如StackExchange.Redis.ConnectionPool等

    SMTP连接池

    在.NET中,大家一般使用SmtpClient发送邮件,SmtpClient 实现将 SMTP 连接池化,以避免重新建立与同一服务器的每条消息的连接开销。 应用程序可以重复使用同一 SmtpClient 对象将许多不同的电子邮件发送到同一 SMTP 服务器.

    但请注意,现在官方文档推荐不使用SmtpClient, 而用MailKit替代,原因是Smtp不兼容新的协议。

    👇欢迎扫码关注我的公众号👇
    image

  • 相关阅读:
    小迈科技可能的面试问题
    Java中的集合
    基于springboot框架的电脑商城项目(十)
    算法笔记-第七章-链表(未完成)
    Leetcode 01-算法入门与数组-①数据结构与算法简介
    【JavaScript】用字符串生成 DOM 元素
    踩坑合集
    STM32内存知识
    探究美颜算法:直播实时美颜SDK的集成和定制
    rust换源
  • 原文地址:https://www.cnblogs.com/kyo-lynn/p/18059877