.NET有这个应用域的概念,根据我的理解,它可用于将程序集加载到内存中.我已经对应用程序域做了一些研究,并且去了我当地的书店,了解了这个主题的一些额外知识,但它似乎非常稀少.
我所知道的我可以使用Application Domains来加载内存中的程序集,我可以在需要时卸载它们.
我提到的应用程序域的其他功能有哪些?线程是否尊重应用程序域边界?除了主要的应用程序域之外,在除了通信性能之外的不同应用程序域中加载程序集有什么缺点吗?
链接到讨论应用程序域的资源也很不错.我已经检查过MSDN,它没有那么多关于它们的信息.
我正在寻找一种方法来在我的过程中找到默认的应用程序域.请注意,当前app域可能与默认域不同,例如当我的代码在内部运行时NUnit.
我知道我可以使用列表中进程的所有应用程序域在这个答案显示COM互操作技巧,并挑选一个它IsDefaultAppDomain()是true.然而,这似乎是一个重量级的解决方案.
有没有办法获得不需要过滤所有域的默认appdomain,最好不要通过COM互操作?
我必须调用一些写得不好的第三方COM组件,这些组件有内存泄漏,并且在长时间运行的过程中使用Single Threaded Apartment [STA].
我知道单独的进程将是实现它的好方法,我可以偶尔从长时间运行的进程重新启动它.
可以改用AppDomain吗?如果适当标记,AppDomain线程是否为STA线程?它是否有自己的COM对象内存?卸载AppDomain是否相当于杀死进程?
我目前正在为我的学士论文研究一个非常模块化和基于插件的框架.主要思想是,我的应用程序结构中有一个文件夹plugins,您可以在其中.dll放入符合特殊接口的已编译插件(例如-files)IPlugin.然后,应用程序使用用户选择的插件执行任务.所以,如果我想在PDF文件中执行一次任务,我会选择PdfPlugin一个单词文档中的一次,我会选择DocPlugin工作.
输出也在接口中定义,因此每个插件都返回相同的数据结构.只是每个库的实际工作不同.
现在,由于应用程序只调用接口中定义的方法,例如ParseDocument(),如何防止插件(可能是由第三方开发)执行有害代码?
我正在研究.NET3.5(可能会切换到4,尚未决定)和C#.
原谅我的无知,但我有几个问题,我似乎无法通过搜索这里或谷歌得到答案.这些问题似乎完全是愚蠢的,但老实说我需要帮助.
在我的Azure网站门户网站上,我有一些我很好奇的东西.
CPU-Time如何应用于我的网站?我不知道我如何使用CPU,除非这适用于托管某种类型的应用程序?我使用此"站点"作为表单将数据提交到我的数据库.
"数据输出"究竟是什么意思?我每天允许165mb.
文件系统存储究竟是什么?这是我的Azure服务器上可用于存储我的项目以及我可能直接托管的任何其他内容的实际空间吗?
最后一个问题是,在这种情况下,内存使用情况如何?我被允许每小时1024mb.
我知道CPU-Time在桌面计算和内存使用方面是什么,但我不确定这如何适用于我的网站.如果我将超过任何这些限制以便我可以升级我的网站,我不知道我将如何投影.
我正在开发一个asp.net Web应用程序,使用户能够提交F#代码,这些代码应该在服务器上动态编译和执行.我正在考虑使用此处显示的方法在Web应用程序中托管F#编译器: https ://fsharp.github.io/FSharp.Compiler.Service/compiler.html 或使用F#interactive:http://fsharp.github .IO/FSharp.Compiler.Service/interactive.html
我们的想法是动态编译F#代码,然后将其作为c#中的程序集加载,或让F#交互式解释代码.但是,我主要担心的是安全性以及如何阻止最终用户执行任意代码.是否有一种简单的方法来限制它?谢谢!
我想问一个问题来实现AppDomain和Activator之间的区别,我通过appdomain.CreateInstance加载了我的dll.但我意识到创建实例的方法更多.因此,何时或何地选择此方法?例1:
// Use the file name to load the assembly into the current
// application domain.
Assembly a = Assembly.Load("example");
// Get the type to use.
Type myType = a.GetType("Example");
// Get the method to call.
MethodInfo myMethod = myType.GetMethod("MethodA");
// Create an instance.
object obj = Activator.CreateInstance(myType);
// Execute the method.
myMethod.Invoke(obj, null);
Run Code Online (Sandbox Code Playgroud)
例2:
public WsdlClassParser CreateWsdlClassParser()
{
this.CreateAppDomain(null);
string AssemblyPath = Assembly.GetExecutingAssembly().Location;
WsdlClassParser parser = null;
try
{
parser = (WsdlClassParser) this.LocalAppDomain.CreateInstanceFrom(AssemblyPath,
typeof(Westwind.WebServices.WsdlClassParser).FullName).Unwrap() ;
}
catch (Exception ex) …Run Code Online (Sandbox Code Playgroud)