C# 3.0 套接字编程;我应该使用pInvoke还是编写现有c+的c版本+;应用程序

C# 3.0 套接字编程;我应该使用pInvoke还是编写现有c+的c版本+;应用程序,c#-3.0,pinvoke,sockets,C# 3.0,Pinvoke,Sockets,我被分配到一个任务,我需要连接到一个套接字并接收大量更新(每秒3K-4K消息),我还需要向服务器发送一些消息以进行身份验证和配置 P>数据提供者提供了一个现有的C++应用程序,它们没有C语言样本。我一直试图用C#编写这个应用程序,但遇到了一些困难;特别是对于包含可变长度数组等的编组结构。。我这样做对吗 我曾建议使用PInvoke,但看起来我需要首先修改他们的C++样本以使其成为API,然后我可以适当地调用它。我不确定PInvoke的性能。 < P>如果应用程序已经在其中,为什么不使用C++?

我被分配到一个任务,我需要连接到一个套接字并接收大量更新(每秒3K-4K消息),我还需要向服务器发送一些消息以进行身份验证和配置

<> P>数据提供者提供了一个现有的C++应用程序,它们没有C语言样本。我一直试图用C#编写这个应用程序,但遇到了一些困难;特别是对于包含可变长度数组等的编组结构。。我这样做对吗


我曾建议使用PInvoke,但看起来我需要首先修改他们的C++样本以使其成为API,然后我可以适当地调用它。我不确定PInvoke的性能。

< P>如果应用程序已经在其中,为什么不使用C++? 如果有理由使用C++,我会一直重写C++,如果它是可行的。您将使用C语言编写新代码,因此您最好进行完整的迁移,而不是繁琐的混合。

我当然不会用pinvoke做网络编程之类的东西。。。这已经够复杂了,不用再加上这些。它不可避免地会对性能造成影响,尽管这确实是“视情况而定”。

p/Invoke会对性能造成损失。C#有一个非常好的网络编程模型,我真的建议你再试一次。这样做的好处是,您将拥有一个完全管理、更高效和可维护的应用程序


当然,如果现有的应用程序非常庞大,需要大量的时间将其移植到C语言中,则可以考虑P/Unjk。但是,由于您仍然需要修改它,因此您失去了这条路线的一些优势。

您可以详细介绍一下c#的“网络编程模型”吗?您很容易在Google中找到很多信息。一切都是通过流来完成的,在我看来,最大的优势在于,当接收到数据时,您可以进行异步调用。如果您错过了它,@kgiannakakis,C#是一种在VM(即CLR)下运行的托管语言,因此,它无法直接与硬件进行互操作。因此,您所说的完全托管套接字和P/Invoke缺陷是没有意义的,因为所有东西都是通过P/Invoke实现的,以与Windows内核通信(所谓的系统调用或系统调用)。如果你不相信我,请看一下.NET Framework参考源代码:正如我对kgiannakakis答案@user243357的评论一样,P/Invoke确实有其缺点,但整个.NET Framework都是基于此。而事实可能并非如此。操作系统中的每个程序只能通过操作系统内核与硬件进行互操作(除非它们是驱动程序或内核模式的程序,并且这些程序都不能用托管语言(如C#)进行编码),因此它们都必须执行对内核的系统调用。P/Invoke是系统调用的CLR模型和实现,只有在实现CLI的运行时下运行,才能使用其他选项。查看.NET参考源。除了C#语言内存模型之外,唯一能让代码得到管理的是.NET Framework工作人员的宝贵工作,他们努力维护安全的CLR内存模型和原则,通过P/Invoke调用在Windows内核的包装器上构建复杂的工作流。