我正在使用C#编写游戏引擎编辑器.这个想法是用户将所有游戏代码写入编辑器将加载的项目中,因此它可以列出用户定义的类,并在场景编辑器中实例化它们.
使用(重新)加载DLL的概念,我可以加载DLL,实例化和调用外部程序集中定义的类的方法,重建外部程序集,并在主机中再次加载它,而无需重新启动主机.这项工作(至少看起来像它),但它不会释放以前加载的程序集的内存.
装载机类:
public class Loader { // This DLL contains an implementation of ILoadable - ILoadable is declared in a shared project. private const string AsmPath = @"D:\Dev\Asmloading\AsmloadingImpl\bin\Debug\AsmloadingImpl.dll"; public ILoadable GetExternalLoadable() { var asmBytes = File.ReadAllBytes(AsmPath); Assembly asm = Assembly.Load(asmBytes,null); var loadableInterface = typeof(ILoadable); var loadableImpl = asm.GetTypes().First(loadableInterface.IsAssignableFrom); return (ILoadable)Activator.CreateInstance(loadableImpl); } }
运行GetExternalLoadable()2或3次,任务管理器显示我的宿主程序中RAM使用量增加约1mb,重复相同的操作将进一步增加它,而不会减少.
有什么方法可以解决这个问题吗?我知道Unity正在做类似的事情,除了它们实际上自己编译外部程序集,但是当我触发重新编译几次时,Unity编辑器不会消耗额外的内存.
所以,我想要完成的是外部装配的“实时重装”.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。