C#:沙箱和性能(MarshalByRefObject)
|
我已经用C#编写了一个非常基本的Web服务器,该服务器加载了自定义模块,这些自定义模块可以处理对特定域名的请求,如配置文件中所指定。自定义模块已加载到新的AppDomain中,因为我需要能够动态卸载它们(也对安全性有好处)。由于模块已加载到新的AppDomain中,因此所有参数和返回类型均为MarshalByRefObject。这工作正常,我传递了一个从MarshalByRefObject继承的HttpRequest对象,并返回了一个由Web服务器发送回客户端的LinkedList。
所有这些工作都很好,但是很多数据作为byte []传递,我相信MarshalByRefObject的代理会将所有字节从新的AppDomain复制到主AppDomain,而不是直接访问它们。因此,如果我对此是正确的,如果其中一个模块将发送5MB文件作为响应,则将在模块中加载/生成5MB,然后将其从模块AppDomain复制到主AppDomain,最后通过套接字返回到客户端。
因此,我的问题是:我能以某种方式解决这个问题,以便它不会在AppDomain之间复制太多数据吗?还是有一种更好的方式而不使用MarshalByRefObject?
没有找到相关结果
已邀请:
3 个回复
乐遣杀屎
锹缄
在新的AppDomain“恢复”套接字中,我不确定幕后到底发生了什么……这是代码:
我不确定调用ѭ2或在新域中创建新的Socket对象时会发生什么情况的细节,但是到目前为止,它运行良好。
俯乡骚钵皆