CreateInstanceFromAndUnwrap 速度和优化

发布于 2024-10-07 19:21:29 字数 395 浏览 6 评论 0原文

我正在开发一个项目,我们必须将一些包含大量 C# 静态变量的遗留代码包装到 WCF 服务中。正如您可以想象的那样,这对于请求应该是无状态的 WCF 服务来说是一场噩梦。

如果没有重大重写,我能想到的最佳解决方案是在单独的 AppDomain 中执行遗留代码,因此它是线程安全的,我使用 CreateInstanceFromAndUnwrap() 来实现这一点。

我让代码正常工作,但问题是它非常慢,因为现在对于每个 WCF 请求,它都必须在代码开始执行之前将所有 20 多个 DLL 重新加载到 AppDomain 中。

我只是想知道有人知道如何优化 CreateInstanceFromAndUnwrap() 吗?例如,我是否可以预加载所有程序集而不加载类,以便每次收到请求时都会重置静态变量?

干杯, 奥斯卡

I'm working on a project where we have to wrap some legacy code that contains a lot of C# static variables into a WCF service. As you can imagine, this is a nightmare for a WCF service where requests should be state-less.

Without a major rewrite the best solution I can come up with is to execute the legacy code in a separate AppDomain so it is thread safe and I used CreateInstanceFromAndUnwrap() to achieve this.

I got the code working but the problem is it's pretty slow because now for every single WCF request it has to reload all 20+ DLLs into a AppDomain before the code even start executing.

I'm just wondering does anyone know how to optimize CreateInstanceFromAndUnwrap()? For example, is there anyway I can pre-load all assemblies without loading the class in so the static variables will be reset everytime a request comes in?

Cheers,
Oscar

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不忘初心 2024-10-14 19:21:29

由于不知道如何才能准确地完成您所要求的事情,至少我想分享我对此事的想法:

  • 您可以进入会话状态吗?这并不能很好地扩展,但如果您可以为每个会话加载一个 AppDomain,您可以获得良好的响应能力。这取决于您有多少并发用户。
  • 您是否可以使用其他一些盒子来充当 AppDomain 池,从而将创建 AppDomain 的成本与服务请求的成本分开?
  • 所有静态数据如何组合在一起是否具有确定性?它们可能是延迟加载的吗?也许通过一些反射或动态方法,您可以设法在请求后擦除静态。

Short of knowing how you could do exactly what you are asking for, at least I want to share my thoughts on the matter:

  • Can you go for session state? This does not scale horribly well, but if you could load an AppDomain for each session you could get good responsiveness. It depends how many concurrent users you have.
  • Can you have some other box that serves as a pool of AppDomains, thereby separating the cost of creating the AppDomain from serving the request?
  • Is it kind of deterministic how all the statics come together? Are they maybe lazily loaded? Maybe with some reflection or with dynamic methods you could manage to erase static state after the request.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文