微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在同一个进程中,在AppDomain之间发送大的字节数组

我正在构build一个networking服务器,并在请求路由到的服务器上启动大量的AppDomain。 将请求有效载荷发送到其中一个AppDomain进行处理的最快方式是什么?

将有效负载套接​​字读入到一个字节数组中并编组。

将networkingstream(从MarshalByRefinheritance)编组到AppDomain。

读取有效载荷。 将其解码为对象。 对解码的对象进行编组。

使用命名pipe道传输字节数组。

使用环回套接字。

也许有一种方法来封送实际的套接字连接?

解码主要是创build不可变的对象,用于确定如何履行客户端请求,然后AppDomain创build一个响应,并将其编组回到通过套接字发回它的主机AppDomain。

方法应该比较less的cpu更less的内存。

WCF不是一个选项。

C#:结合DllImport与inheritance?

从stringType.GetType(string)与Type.AssemblyQualifiedname和Type.FullName获取System.Type实例

Windows 10的开始菜单是否支持自定义图标文件夹?

Windows服务权限来读取共享文件

在C#中远程设置时区

SetFilePointerEx API来读取MFT

PsExec&进程通过C#不显示输出

一个完整的user32.dll包装库可用于.NET?

有没有办法部署.Net应用程序而不使用MSI?

C#同步进程启动

TCP二进制远程处理肯定是快速的,我并没有比原始套接字快多少,而这可能是最快的,而是一个皇家PIA。

我已经在生产中使用两个盒子之间的HTTP二进制远程运行每秒1500 – 2000 req。 在同一个盒子上,使用TCP或名称管道通道应该有很高的性能,这取决于处理数据所需的cpu周期。

如果我是你,我会看看卡西尼是如何实施的。 它几乎完全是你正在谈论的事情。

其实Cassini已经被Webhost取代了,它是现在随Visual Studio一起发布的内置Web服务器。 在Phil Haack的博客上看看这篇文章

很好的问题。 如果我遇到这个问题,我可能会使用一个缓冲的流/内存流,并将流编组到AppDomain中,消耗该对象以减少封送或序列化在不同的AppDomain中创建的许多对象图。

但是,再次,这听起来像你几乎完全复制IIS的功能,所以我会看/反射到System.Web.Hosting命名空间,看看他们如何处理它和他们的WorkerThreadPool等….

也许有一种方法来编组实际的套接字连接?

第六是IMO最好的选择。 从进程角度来看,Socket只是一个句柄。 AppDomains驻留在单个进程中。 这意味着,应用程序域可以交换套接字句柄。

如果套接字编组不起作用,您可以尝试在其他appdomain中重新创建套接字。 您可以使用DuplicateAndClose来执行此操作。

如果这样做不行,你应该做一些性能测试来选择最好的数据传输方法。 (我会选择命名管道或Memomry映射文件

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐