gpt4 book ai didi

C#:沙箱和性能 (MarshalByRefObject)

转载 作者:行者123 更新时间:2023-12-03 22:17:49 28 4
gpt4 key购买 nike

我用 C# 编写了一个非常基本的 Web 服务器,它加载自定义模块来处理对配置文件中指定的特定域名的请求。自定义模块被加载到新的 AppDomain 中,因为我需要能够动态卸载它们(也有利于安全性)。因为模块被加载到新的 AppDomain 中,所以所有参数和返回类型都是 MarshalByRefObject。这工作正常,我传递了一个继承自 MarshalByRefObject 的 HttpRequest 对象,并返回一个由 Web 服务器发送回客户端的 LinkedList。

所有这些都运行良好,但很多数据作为 byte[] 传递,我相信 MarshalByRefObject 的代理会将所有字节从新 AppDomain 复制到主 AppDomain,而不是直接访问它们。因此,如果我的说法是正确的,如果其中一个模块发送 5MB 文件作为响应,则将在模块中加载/生成 5MB,然后从模块 AppDomain 复制到主 AppDomain,最后通过套接字发送返回给客户端。

所以,我的问题是:我可以以某种方式解决这个问题,这样它就不会在 AppDomain 之间复制太多数据吗?或者是否有更好的方法来执行此操作而不使用 MarshalByRefObject?

最佳答案

字符串是每个进程而不是每个应用程序域(出于性能原因)。如果传递 html/xml(而不是二进制数据),您可以更改 api 以使用字符串而不是字节 []。您甚至可以支持常见情况下的字符串和二进制情况下的 byte[]。

关于C#:沙箱和性能 (MarshalByRefObject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6322480/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com