- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几个资源 DLL,当应用程序开始使用以下代码时,我当前会加载它们:
Assembly ass = Assembly.LoadFrom(fi.FullName);Type t = ass.GetTypes()[0];string ns = t.Namespace;BaseFacade bf = Activator.CreateInstance(t) as BaseFacade;// bf.GoWild()...
当我拥有该 BaseFacade 时,我会疯狂地调用函数以从 DLL 获取资源,并且一切正常。然而,初始 LoadFrom 非常慢,对于 10 个 DLL,我需要 30 多秒。
那么,我想知道其他方法吗?有没有?我想知道是否可以这样做:
[DllImport("myResources1.dll")]public static extern void GoWild();[DllImport("myResources2.dll")]public static extern void GoWild();
??如果可能的话,我将如何为资源 DLL 公开那些 GoWild 函数?此外,考虑到 DLL 并不总是在主 DLL 的目录中(并且用户可以选择移动这些 DLL),我如何将应用程序指向 DLL 的位置?
感谢您对此主题的任何建议!
最佳答案
可能提高性能的一件事是不从加载的程序集中检索所有类型。如果它们有那么大(10 MB),我假设每个类型中都有大量类型需要反射来解决。换句话说,摆脱 ass.GetTypes() 调用,因为您显然只需要来自程序集的一种类型。
顺便说一句,访问返回类型数组中的第一个元素似乎有风险,因为反射不能保证返回类型的顺序。
您可以改为定义一个程序集级别的自定义属性,该属性指定应加载哪种类型(派生自 BaseFacade)。
关于c# - DllImport 而不是缓慢的 Assembly.LoadFrom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2331504/
我正在加载 Assembly.LoadFrom存储在应用程序基本路径之外的程序集 (A);我加载的程序集引用了同一目录中的另一个 .net 程序集 (B)。 当我尝试使用 A 程序集的某些方法时,Fu
我正在使用 Assembly.LoadFrom 加载我的 dll 并稍后创建它的实例。 这是我的问题。 有时我可以修改我的 dll。更准确地说,我删除它并创建一个具有相同名称和路径的新文件。当我再次实
我一直在尝试使用 Assembly.LoadFrom() 设置插件系统,该插件系统动态加载 .exe 目录的子文件夹中的 dll。 我有一个接口(interface)库被 .exe 和插件引用。构建完
我对 Assembly.LoadFrom 的行为感到困惑.在我的应用程序中,我将 Assembly.LoadFrom 调用到 .NET .exe 并使用 EntryPoint.Invoke 启动它(这
我正在使用加载另一个程序集 Assembly.LoadFrom("path.exe"); 然后我似乎无法从文件系统中删除该 exe。所以我想知道这条路径是否保留一个打开的文件句柄以及我如何关闭它? 最
是否可以使用带有 Evidence 参数的 Assembly.LoadFrom 重载来确保程序集是强命名的?我希望能够指定程序集名称、区域性、版本和公钥 token 。如果任何此信息不匹配,程序集将无
public Assembly LoadAssembly(string assemblyName) //@"D://MyAssembly.dll" { m_assembly = Assembl
我正在尝试根据 Environment.Is64BitProcess 实现某些程序集的动态加载。 这基本上是这样工作的: 为 AppDomain.AssemblyResolve event 注册一个事
我在一个给定的解决方案中有多个项目。从 ProjectA 我将“myProjectB.dll”作为程序集名称传递给方法调用在项目C中。 当我在 ProjectC 中执行以下命令时,程序集名称是“myP
我有几个资源 DLL,当应用程序开始使用以下代码时,我当前会加载它们: Assembly ass = Assembly.LoadFrom(fi.FullName);Type t = ass.GetTy
想象一下这个场景: var ass1 = Assembly.LoadFrom(@"C:\Work\3.59\assembly1.dll"); var ass2 = Assembly.LoadFrom(
我正在尝试使用以下代码在 C# 中获取 exe 的汇编版本 Assembly asm = Assembly.LoadFrom(address); return asm.GetName().Versio
在这里引用 Jon Skeet 的回答:Pass An Instantiated System.Type as a Type Parameter for a Generic Class 我需要根据泛型
我有一个 WPF 程序集,我使用 LoadFrom 加载上下文从 native 代码在互操作场景中使用,如下所示: AppDomain.CreateInstanceFrom("c:\mydlls\my
我需要检查加载 dll 后运行 GetTypes() 的时间量。代码如下。 Assembly assem = Assembly.LoadFrom(file); sw = Stopwatch.Start
GetCustomAttribute 找不到通过自定义 AssemblyLoadContext 中的“Assembly.LoadFrom(path)”加载的程序集的属性。 负载流: 主应用有自定义的
我正在开发一个小型演示,从 DLL 文件组装类。 这是我的代码: string path = @"\\192.168.1.3\shareFolder\testzwm.dll"; Assembly as
我正在开发一个从 DLL 文件组装类的小演示。 这是我的代码: string path = @"\\192.168.1.3\shareFolder\testzwm.dll"; Assembly ass
我正在制作一个音频应用程序,它使用使用加载的 dll 插件Assembly.LoadFrom(file).GetTypes()... 和 Activator.CreateInstance(T)。 我的
我正在使用 Assembly.LoadFrom(fileName) 加载程序集。当 fileName 在本地机器上时,一切正常。但是,当相同的文件(和依赖项)位于远程网络共享上时,当我尝试从创建新的
我是一名优秀的程序员,十分优秀!