几个 AppDomains 和本机代码

编程入门 行业动态 更新时间:2024-10-25 00:28:03
本文介绍了几个 AppDomains 和本机代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时送ChatGPT账号..

我的 C# 应用程序使用的本机代码不是线程安全的.

My C# application is using native code which is not thread safe.

我可以运行该本地代码的多个进程,使用进程间通信来实现并发.

I can run multiple processes of that native code, using inter-process communication to achieve concurrency.

我的问题是,我可以改用应用程序域,以便多个托管线程(每个位于不同的应用程序域)调用本机代码并且它们不会相互干扰吗?

My question is, can i use App Domains instead, so that several managed threads, each on a different App Domain, will call the native code and they will not interfere with each other?

主要目标是防止进程分离.

The main goal is to prevent process seperation.

推荐答案

是的可以做到,但你应该认真衡量努力是否有回报.

Yes it can be done but you should seriously measure if effort is repaid by benefits.

Windows 不会加载 非托管 DLL 的多个副本,并且非托管 DLL 是按进程(而不是按 AppDomain)加载的.您可以做的是创建同一 DLL 的多个临时副本,然后使用 LoadLibrary() 加载它们.

Windows won't load multiple copies of an unmanaged DLL and unmanaged DLLs are loaded per-process (not per AppDomain). What you can do is to create multiple temporary copies of same DLL then load them with LoadLibrary().

每个进程都将被加载,但它们将彼此分离(因此它们将是线程安全的).所有这些东西都可以绑定在一个包含非托管调用(LoadLibraryFreeLibraryGetProcAddress 和调用本身)的类中.它将使用更少的资源,并且比多个进程更快,但您必须放弃 DllImport 的使用.

Each one will be loaded per-process but they'll be separated from each other (so they'll be thread-safe). All this stuff can be tied inside a class that wraps unmanaged calls (LoadLibrary, FreeLibrary, GetProcAddress and invocation itself). It'll use less resources and it'll be faster than multiple processes but you'll have to drop DllImport usage.

我看到的唯一好处是,如果您重用保留缓存的实例(保留进程缓存比保留对象缓存更难),这将比多个进程更好地扩展(因为它使用更少的资源).

The only benefit I see is that this will scale much better than multiple processes (because it uses less resources) of course if you reuse instances keeping a cache (it's harder to keep a process cache than an object cache).

这篇关于几个 AppDomains 和本机代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

更多推荐

[db:关键词]

本文发布于:2023-04-17 21:43:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/922669.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:几个   本机   代码   AppDomains

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!