.net动态加载程序集占用文件

.net动态加载程序集占用文件,第1张

.NET动态加载程序集是一种在运行时动态加载程序集的方法,可以通过代码生成和加载程序集来实现灵活性更强的应用程序。但是使用.NET动态加载程序集可能占用文件,具体原因如下:

1. 程序集加载需要在磁盘上存储程序集文件,这是不可避免的。当你首次加载程序集时,它会从磁盘上读取该文件并将其加载到内存中。因此,这可能会导致一些磁盘IO *** 作。

2. 当程序集被加载时,它会占用系统内存。如果同时加载多个程序集,尤其是大型程序集,系统内存的使用量可能会增加很多。

3. 如果你使用了反射技术,在运行时动态创建和修改对象,可能会额外占用一些内存空间。

因此,如果你需要使用.NET动态加载程序集,需要注意以下几点:

1. 避免同时加载大型程序集,以减少系统内存的使用量。

2. 当程序集不再需要时,及时卸载该程序集,释放系统内存。

3. 使用反射技术时,仅在必要时才创建和修改对象,尽量避免占用额外的内存空间。

4. 需要注意程序集文件的安全性,确保只加载可信任的程序集文件,避免受到恶意程序的攻击。

Unity开发者可以在一个文件夹中自定义程序集。定义明晰的依赖关系,可以确保脚本更改后,只会重新生成必需的程序集,减少编译时间。

在一个项目中会存在多个程序集,例如SDK集合、热更集合、插件集合、主集合等,如果未自定义程序集,修改其中一个集合的脚本后Unity再次编译,这时Unity会将所有集合都编译一遍,时间的浪费是我们所不希望的。当我们为每一个集合都定义程序集后,修改脚本只会编译对应的程序集。

通过在Unity中点击:Assets >Create >Assembly Definition菜单创建。该文件的扩展名是.asmdef。

需要注意的是程序集名与文件名无关,真正有关联关系的是Inspector面板中Name对应的名称

该程序集我们还可以在解决方案中观察到

程序集依赖关系成树状,一旦确立依赖关系,低层级的程序集则无法调用高层级程序集里的类和方法。

这里我设立了三个程序集:Unity.Hotfix、Unity.Model、Unity.ThirdParty;

他们之间的依赖关系如下

这样在Hotfix程序集里可以调用Model与ThirdParty程序集中的脚本,但是Model无法调用Hotfix程序集中的脚本

程序集会管理它当前所在文件夹和子文件夹中的脚本。

如果一个脚本当前文件夹中定义了一个程序集,它的父文件夹中也定义了一个程序集,该脚本会被归纳到它当前文件夹的程序集中

在平台中可以设置程序集编译平台

这样可以使某些程序集避免在一些特殊平台下被编译,常见的例如我们希望我们的Edtor程序集或热更资源程序集只在编辑器下被编译,那么我们就可以在平台设置中只勾选Editor

程序集是经由编译器编译得到的,供 CLR 进一步编译执行的那个中间产物。它一般表现为 .dll 或者是 .exe 的格式,但是要注意,它们跟普通意义上的 WIN32 可执行程序是完全不同的东西,程序集必须依靠 CLR 才能顺利执行。程序集是 .NET 编程的基本组成部分。

此示例测试 DLL 是否为程序集:

GetAssemblyName 方法会先加载测试文件,然后在读取信息后释放。

与 GetAssemblyName 方法不同,PEReader 不会在本机可移植可执行文件(PE)上引发异常。这使您能够在需要检查此类文件时避免异常导致的额外性能成本。如果文件不存在或不是PE文件,您仍然需要处理异常。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11652035.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存