代理服务器的C#性能(vs C)

代理服务器的C#性能(vs C)

C# Performance For Proxy Server (vs C++)

我想创建一个简单的http代理服务器,该服务器对http标头进行一些非常基本的处理(即,如果标头x == y,请执行z)。服务器可能需要支持数百个用户。我可以用C#(非常简单)或c(更难)编写服务器。但是,C#版本的性能是否与C版本一样好?如果不是,那么性能差异是否足够大,以至于用C#编写它就没有意义了?


您可以在关键的瓶颈点使用不安全的C#代码和指针,以使其运行更快。它们的行为很像C代码,我相信它的执行速度也很快。

但是在大??多数情况下,C#已经在速度上达到了极速,我不相信每个人都说过会有什么不同。

但是您可能要考虑的一件事是:与在C中有效使用指针相比,托管代码(C#)字符串操作相当慢。使用C指针比使用CLR字符串有更多的优化技巧。

我想我以前做过一些基准测试,但是不记得我把它们放在哪里了。


为什么您期望C应用程序具有更高的性能?

当您正确执行操作时,C#应用程序不会增加任何固有的速度减慢。 (没有太多丢弃的引用,频繁的对象创建/每次调用丢弃等)。

只有当您可以执行(非常)低级操作时,C应用程序才能真正胜过等效的C#应用??程序。例如。转换原始内存指针,内联汇编程序等。

C编译器在创建快速代码方面可能会更好,但是大多数情况下,这在大多数应用程序中都是浪费的。如果您确实有一部分应用程序必须非常快,那么请尝试为该热点编写C调用。

仅当大多数系统的运行速度过慢时,才应考虑使用C / C编写它。但是有很多陷阱可能会破坏您在C代码中的性能。

(TLDR:C专家可以像C#专家一样创建"更快"的代码,但是平庸的C程序员可以比平庸的C#编写更慢的代码)


我希望C#版本与C版本几乎一样快,但占用的内存更少。
在某些情况下,与未优化的C相比,托管代码实际上快很多,并且使用的内存更少。如果由专家编写,C代码可以更快,但是很少证明这样做的合理性。

作为旁注,我可以回忆起Michael Kaplan(c#)和Raymond Chan(C)在Blog圈中的性能"竞争",它编写了一个程序,其作用完全相同。经过长时间的努力重写了大部分代码后,被认为是世界上最好的程序员之一(乔尔)的Raymond Chan成功地编写了更快的C语言。


您的http服务器是否要在专用计算机上运行?如果是的话,我想说如果您更方便的话,请使用C#。如果需要在同一台计算机上运行其他应用程序,则需要考虑应用程序的内存占用以及GC将在"随机"时间运行的事实。


如果您需要快速可靠的代理服务器,可以尝试一些已经存在的代理服务器。但是,如果您具有必需的自定义功能,则可能必须构建自己的功能。您可能希望收集有关预期负载的更多信息:数百个用户可能是一分钟几个请求,或者每秒一百个请求。

假设您需要在一台机器上以200 qps或以下的速度运行,C#应该可以轻松满足您的需求-即使以慢速而闻名的语言(例如Ruby)也可以轻松地每秒发出数百个请求。

除了性能外,还有其他选择C#的原因,例如与C#相比,用C语言编写缓冲区溢出要容易得多。


根据我的经验,设计和实现与性能的关系比语言/框架的选择要重要得多(但是,通常需要注意的是:例如,不要用C#或Java编写设备驱动程序)。铅>

对于使用托管语言(例如Java,C#等)描述的程序类型,我不会三思而后行。如今,使用低级语言(从与硬件的紧密性方面)获得的性能提升通常很容易被托管环境的运行时能力所抵消。当然,这是来自C#/ python开发人员的,所以我并非一无所知...


您描述的代理服务器将主要处理字符串数据,我认为在C#中实现它是合理的。在您的示例中,

1
if header x == y, do z

最慢的部分实际上可能在执行'z',无论语言如何,您都必须执行该工作。


推荐阅读