C# 在ServicePoint上永久设置属性的正确方法

C# 在ServicePoint上永久设置属性的正确方法,c#,servicepoint,servicepointmanager,C#,Servicepoint,Servicepointmanager,我想关闭特定连接上的Nagle算法(在我的例子中,是到ElasticSearch服务器) 我的代码当前看起来像这样: ServicePointManager.FindServicePoint(new Uri(uriWithoutLocalPath)).UseNagleAlgorithm = false; 问题是,ServicePoint对象在一段时间后被回收,这导致它丢失设置。因此,我不能在系统启动时只运行一次这段代码。看来我面前有几个选择: 全局关闭Nagle算法(因此,影响我不想影响的连接

我想关闭特定连接上的Nagle算法(在我的例子中,是到ElasticSearch服务器)

我的代码当前看起来像这样:

ServicePointManager.FindServicePoint(new Uri(uriWithoutLocalPath)).UseNagleAlgorithm = false;
问题是,
ServicePoint
对象在一段时间后被回收,这导致它丢失设置。因此,我不能在系统启动时只运行一次这段代码。看来我面前有几个选择:

  • 全局关闭Nagle算法(因此,影响我不想影响的连接)
  • 增加,这样,
    ServicePoint
    就永远不会被回收(可能是个坏主意?我的直觉告诉我)
  • 设置某种计时器,每N秒重置一次属性,其中N小于
    服务点的循环时间
  • 每次使用连接时重置属性

  • 我真的不喜欢这些选项中的任何一个,它们要么影响系统中的其他事情,要么对我想做的事情来说太复杂(比如定时器选项)。在我看来,应该有一个简单的解决办法。想法?

    嗯,看来你已经列出了可行的选择。我会使用#4,在创建连接时重置属性。@RichardSchneider:我每次使用连接时都必须这样做,而不是创建连接。我担心性能和线程安全如果我走这条路线,FindServicePoint看起来不像我希望每次调用100次的方法second@DoronYaacoby你找到别的选择了吗?我面临着同样的问题,目前使用的是解决方案4,但我也和你一样担心性能问题。@enzi遗憾的是,没有。我选择了解决方案1,但它似乎没有给其他连接带来性能问题,所以我坚持了这一点。