gpt4 book ai didi

c# - DllImport 而不是缓慢的 Assembly.LoadFrom

转载 作者:行者123 更新时间:2023-11-30 14:19:43 26 4
gpt4 key购买 nike

我有几个资源 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/

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