【问题标题】:Maintaining a large number of open sockets in a c# application在 c# 应用程序中维护大量打开的套接字
【发布时间】:2011-05-27 12:32:20
【问题描述】:

我正在用 C# 编写一个应用程序,我想在其中维护大量打开的套接字连接 (tcp),并能够响应来自所有这些连接的数据。现在,通常要做的事情(afaik)是在所有这些上调用 BeginRead,但据我所知 BeginRead 会产生一个线程并坐下来等待该线程中的数据,而且我读过线程不会当使用大量它们时,往往会很好地扩展。虽然我可能对此有误,但如果是这样,请告诉我。

这可能听起来很愚蠢,但我想要的是能够维持尽可能多的开放套接字连接(在我的机器/操作系统允许的情况下),同时仍然能够对来自其中任何一个的数据做出反应尽可能快,并尽可能少地使用系统资源。

我的想法是将它们全部放在某种列表中,然后在它们上运行一个循环的线程检查新数据并处理新数据(如果有的话),尽管我'会认为这样的循环最终会炸毁我的cpu(因为循环中没有任何东西会阻塞)。有什么方法(简单与否,我不介意使用一些更复杂的算法来解决这个问题)可以实现这一目标吗?任何帮助将不胜感激。

【问题讨论】:

    标签: c# performance sockets concurrency


    【解决方案1】:

    【讨论】:

    • 这是否意味着我可以在所有这些上调用 ReadAsync,这将是最有效的方式?
    • 两个问题的答案:是的。
    • 您是否也有一个链接描述 BeginRead 和 ReadAsync 之间的区别?还是这只是句法?
    • 所有旧的异步方法(BeginXX/EndXX)为每个操作创建一个新的IAsyncResult 对象。如果你有一个高性能的服务器,这是非常低效的。 XxxxAsync 方法使用了另一种方法。
    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 2018-01-26
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多