每日快播:Natasha Preheating(三)
NatashaInitializer.Preheating 预热方法
首次使用Natasha时都需要进行初始化操作,其中该方法还可以加入一个回调函数作为参数,该回调函数主要作用为减少程序集引用文件的加载,可以有效的控制内存涨幅
通过判断Preheating方法中回调函数的第二个参数,可以有选择性的加载哪一类
// 可以通过声明哪一些包不需要引用,例如Drawing,Xml等// 该变量的数值应该为某一部分的包,如果写System,所有包含System的都无法引用,例如System;System.Linq等List
noLoadDlls = new List () { "Drawing","Xml"};// 第二个参数为系统添加的dll名称// 当返回值为true时为排除该引用// 当返回值为false时为添加该引用NatashaManagement.Preheating((asName, name) => { if (!String.IsNullOrEmpty(name)) { // 判断noLoadDlls中是否存在符合参数二的数据 // 如果有则返回noLoadDlls中的数据,否则返回空字符串 // 将判断的字符串都变为小写或大写,这样就不会出现大小写判断的问题了 var bReturn = noLoadDlls.Where(dll => name.ToLower().Contains(dll.ToLower())).ToList().FirstOrDefault(""); return !String.IsNullOrEmpty(bReturn); } return false;}); Preheating方法中回调函数的第一个参数为AssemblyName,主要判断程序集版本号,程序集名称等
(资料图片仅供参考)
AssemblyName中的Name就是回调函数中的第二个参数,单独拿出来的目的感觉主要还是对比名称
// 排除 dapper 主版本号为 12 的程序集引用文件NatashaInitializer.Preheating((asmName, name) => { if (asmName.Name != null) { if (asmName.Name.Contains("Dapper") && asmName.Version!.Major > 12) { return true; } } return false;});
Preheating主要干了什么
如果有回调函数,则赋值给DefaultUsing.SetDefaultUsingFilter和NatashaDomain.SetDefaultAssemblyFilter,让回调函数一直有效
获取所有系统引用,回调函数,判断是否有手动排除引用的
使用DependencyContext.Default.CompileLibraries获取CLR中的所有库
其中AssemblyName.GetAssemblyName的作用为将文件转换为程序集
// DependencyContext.Default.CompileLibraries获取CLR中的所有库IEnumerable
? paths = DependencyContext .Default // cl.ResolveReferencePaths 获得的应为绝对路径 .CompileLibraries.SelectMany(cl => cl.ResolveReferencePaths().Where(asmPath => { //将文件转换为程序集 var asmName = AssemblyName.GetAssemblyName(asmPath); // Preheating的回调函数 return !excludeReferencesFunc(asmName, asmName.Name); }));
将排除后的都添加到Natasha中
// 1. 通过Path.GetFileNameWithoutExtension获得文件名// 2. 把获得的文件名与文件的绝对地址关联起来var resolver = new PathAssemblyResolver(paths);// 检查目的而加载的 Type 对象的封闭范围// 参见:https://learn.microsoft.com/zh-cn/dotnet/api/system.reflection.metadataloadcontext?source=recommendations&view=dotnet-plat-ext-7.0using (var mlc = new MetadataLoadContext(resolver)){ // 并发var result = Parallel.ForEach(paths, (path) =>{ Assembly assembly = mlc.LoadFromAssemblyPath(path); // 添加资源 NatashaReferenceDomain.DefaultDomain.References.AddReference(assembly.GetName(), path); DefaultUsing.AddUsingWithoutCheck(assembly); // 将该类放到缓存中 NatashaDomain.AddAssemblyToDefaultCache(assembly); }); // 如果加载项一直没完成,则一直等待中 while (!result.IsCompleted) { Thread.Sleep(100); }}
创建了一个Supperess为CS8019的配置实例,然后测试了一下,没问题就结束了
有问题,那Preheating初始化会失败
结束
移除了不需要的包,如果想额外的添加类或dll
// 第一个方法必不可少NatashaInitializer.Preheating();// 1.增加全局的 Using 引用NatashaManagement.AddGlobalUsing("System.IO");// 2.向全局引用中增加类型对应的元数据// 如果需要Natasha 自动覆盖全部引用,请引入 "DotNetCore.Compile.Environment" 包.NatashaManagement.AddGlobalReference(typeof(int));// 3.直接追加程序集到全局引用中// path为dll文件的绝对路径Assembly assembly = mlc.LoadFromAssemblyPath(path);NatashaReferenceDomain.DefaultDomain.References.AddReference(assembly);
标签:
精彩推送
每日快播:Natasha Preheating(三)
NatashaInitializer Preheating预热方法首次使用Natasha时都需要进行初始化操作,其中该方法还可以加入一个
世界热推荐:中非共和国通报中国公民遇袭事件调查进展 中方回应
中新网北京4月20日电(记者张蔚然)中国外交部发言人汪文斌4月20日主持例行记者会。有记者提问:中非共和国有
柳药集团大幅下跌 一季度营收及利润双增长 公司拟定增募资10亿元
柳药集团盘中异动,截至10时12分股价下跌7 02%,换手率为1 54%,成交额1 37亿元。公司今日披露非公开发行预
4月20日收评:上证指数微跌0.09% 三市成交11386亿
今天(2023年04月20日)沪深京A股三市,上证指数小幅低开0 09%,报收3367 03点,跌幅3 10点,微跌0 09%;深
环球资讯:浙江《分布式光伏发电项目能源管理合同(范本)》发布
日前,浙江省光伏产业技术创新战略联盟在充分征求各方面意见基础上,联合杭州市太阳能光伏产业协会、杭州市
新闻快讯
新闻快讯
- 每日快播:Natasha Preheating(三)
- 世界热推荐:中非共和国通报中国公民遇袭事件调查进展 中方回应
- 柳药集团大幅下跌 一季度营收及利润双增长 公司拟定增募资10亿元
- 环球热门:Python面向对象编程-元类
- 2023天津梨木台景区五一游(景区地址+门票价格)
- 京东投诉电话人工服务电话号码_京东人工投诉电话号码
- 国家发改委:出台务实管用政策措施 巩固经济向好势头
- 4月20日收评:上证指数微跌0.09% 三市成交11386亿
- 环球资讯:浙江《分布式光伏发电项目能源管理合同(范本)》发布
- 4月22日晚21时起,五丫口大桥将进行交通管制
- Python面向对象编程-三大特性-继承-单继承 环球播报
- 当值以来首次公开亮相 华为轮值董事长孟晚舟:成功的数字化转型都是由战略驱动而非技术驱动
- 广东省内钢厂生产及利润情况_微头条
- 焦点观察:信阳市淮滨县:税宣服务进商圈 惠企利民暖人心
- 最高气温将升至37℃以上 海口继续发布高温橙色预警 每日观察
- 焦点滚动:社区教育助力社区治理!上海市社区教育实验表彰大会召开
- LCK工资规模曝光!Peyz年薪最低,GEN简直赚麻了!
- 聚焦:越秀地产拟通过供股筹集83.6亿港元 所得款项净额用于进一步投资
- 每日观点:保送清北3回,归来仍是高二!这名浙江高中生逆天了!现在他将争取第4次……
- 新消息丨绝不放过你主题曲(绝对不放)
- 干瞪眼怎么玩_干瞪眼在线玩 世界信息
- 从经典进入文学的世界
- 微资讯!中国传统二十四节气解谜游戏《四季之春》上线蒸汽平台,25.2 元
- 德赛西威与芯驰联合首发国产化座舱域控平台_每日消息
- 乌防长证实德国援助的“爱国者”防空系统已运抵乌克兰_环球最新
- 中国国际广播电视信息网络展览会开幕
- 天天微资讯!河北省工业企业和中小微企业今年将获2.1万亿融资支持
- pilot什么意思_pilot的意思
- 大行评级|摩通:中国铁塔首季业绩胜预期维持“中性”评级 环球看热讯
- 环球观焦点:七国集团外长会声明包藏祸心
- 东航首开北京大兴洲际客班 全球热点
- 4月20日生意社新戊二醇基准价为10466.67元/吨_环球看点
- 明道官宣妻子怀二胎 一儿一女好事成双 环球热闻
- 华数传媒:4月19日融券卖出13.41万股,融资融券余额4.86亿元 快资讯
- 天津居住证签注收费吗?_天天视点
- 世界快播:在逆境中前行的例子_现代逆境中成功的例子
- 世界钢铁协会:2023年全球钢铁需求将反弹2.3% 达到18.223亿吨
- 全球速看:长三角铁路五一期间增开多趟旅客列车
- 当前头条:中国工业互联网的快速发展获业界点赞和认可
- 董监高持股变动日报:4月18日披露2家上市公司高管增持10家减持
- 环球新资讯:林思颐象棋_林思颐
- 邓州农商银行召开2023年首季工作总结暨业务分析会
- 萝卜和水果能一起吃吗 萝卜和水果能同时食用吗 焦点热讯
- 行在赤壁·乡村美景篇 | 风清景明春盎然,诗意赤壁漫乡间 当前报道
- 打印机不打印显示一个文档被挂起删除不 打印机不打印显示一个文档被挂起|世界热议
- 天天播报:国芳集团:公司主要经营连锁零售业务,经营范围不涉及房地产开发与酒店行业
- 每日时讯!中方已明确要求泰方妥善封存熊猫“林惠”尸体 将组建专家组开展死因调查
- 天语P50手机怎么样?——一款超长待机手机的全面评测
- 金正恩携女儿金主爱视察朝鲜国家宇宙开发局,指示如期发射侦察卫星
- 9月1号的美元汇率_9月1日美元对人民币汇率走势图今天美元兑人民币多少-每日热讯