.Net core 的热插拔机制的深入探索及卸载问题求救指南_应用技巧

来源:脚本之家  责任编辑:小易  

调度服务器:(2U机架式服务器。双四核英特尔至强处理器5570 2.93GHz,8GDDR3 RDIMM内存e68a8462616964757a686964616f31333262376663,4X300GB SFF 10K SAS 热插拔硬盘,集成双千兆以太网,支持网络唤醒、网络卸载引擎(TOE)等网络高级特性。内置 CDRW/DVD Combo。2x675W热插拔电源,可选冗余。调度服务器:(2U机架式服务器。双四核英特尔至强处理器5570 2.93GHz,8GDDR3 RDIMM内存,4X300GB SFF 10K SAS 热插拔硬盘,集成双千兆以太网,支持网络唤醒、网络卸载引擎(TOE)等网络高级特性。内置 CDRW/DVD Combo。2x675W热插拔电源,可选冗余。ServerRAID MR10i。集成IMM, 可选的Virtual Media Key用于远程在线支持,光通路诊断面板(对处理器、VRM、内存、硬盘驱动器、电源及风扇关键部分的故障进行快速诊断)。三年有限保修)这是IBM的服务器3650M2蛋停产了替代是3650M3 5670/2.93 ,8GBDDR3 4X300GB 10K 2X675W,.....价格38000含税 数据服务器:(4Ux3850 M2, 2 x Xeon Quad Core E7420 90W 2.13GHz/1066MHz/8MB L3, 16GB, O/Bay HS4*300G 2.5in SAS, R5/UltraSlim Enhanced SATA CD-RW / DVD-ROM Combo, 2x1440W p/s, Rack) 停产替代是3850X5 价格 71000含税存储服务器:存储服务器(IBM Raid0、1、3、5、10光纤通道磁盘存储,DS4800 Express Model (4 GB Cache)/450G*16) 89000含 网络交换机:1台 网络防火墙:1台 42U服务器机柜:1个 Y 7800 我的邮箱 IBM19861008@163.COM,你好,看2113到你的提问,我是戴尔5261(中国)4102有限公司的服1653务器工程师,这个问题回可以帮到你答。复制你的问题发到我的邮箱dawei_liu@dell.com,或拨我的办公直线0592-8185549。我稍后把整体服务器的详细报价单,存储,交换机,防火墙及机柜的参数发送给你。另外有些应用细节需要与你沟通,这样更利于做完善的方案给你,四川电信各个机房欢迎您托管服务器。游戏服务器布点等工作。我空间有联系方式,请你加我·,1.坚持看CCTV-1新闻联播。 要想把握经济命脉,必须关注政局,新闻联播图文并茂62616964757a686964616fe4b893e5b19e31333262376663,有声有色,着实为中国商人的最佳晴雨表。 2.不要轻易相信合约或合同 哪怕合约让你的律师看过了,公证处公证了都不要轻易相信,甚至当你的客户把钱已经汇入你指定的账户以后你都必须确认,这笔钱你能不能拿出来,能不能动,而合约以外的涉及到利益冲突的任何口头承诺与解释你都必须当他是放屁,无论香还是臭,在对方兑现承诺以前都不要沉湎其中,更无论对方是谁,哪怕那是你交了十年的朋友甚至是和你上了床的女人都必须如此。 3.你自己必须守信,一诺千斤,但对不守信的人例外!! 你确认你一定能够做到的事情你才可以承诺,但不要夸大其辞;你如果想一直做个商人,那么你必须树立自己的信誉!虽然你可以不在乎外界对你的争议甚至你也可以制造争议但你不能失去信誉,否则你就不是一个商人而是一个骗子;信誉具体包括你如果和别人约了2:00见面,那么你绝对不可以1:50以前或者2:01以后出现,如遇交通堵塞或意外事件,那你必须及时通知对方,除非你出了车祸遇到空难昏迷不醒或者已经死亡,否则你都没有理由爽约、早到太早或迟到太迟,而你的涵养则体现在对待对方不守时不守承诺的态度与包容等方面;而一旦当你确认对方是在为了利益而一再欺骗你,那么你对对方做出的一切行为都不过分,甚至你可以将计就计,反过来给他画一个饼! 4.你能赢得起但你可能输不起的生意最好不做! 在做任何生意以前,你都必须考虑清楚,如果你输了,那么你是否输得起,而不是去考虑你如果赢了会怎样怎样,输不起的事情你最好别做!而考虑输的范围时你也不要只考虑钱财方面,作为半个商人,有些东西你永远都输不起,包括你爱的女人,你的家人,你的江湖地位甚至你的信誉;所以你必须在做任何生意以前全面考虑清楚你究竟输得起输不起,如果输得起,那么OK,你去义无返顾的做吧! 5.不要先期投入太多,给自己留够底牌 不要把自己手里所有的牌全部亮出来,喝红茶,因为牌局随时会中途停止,而对方也随时会出新的牌,不到最后关键时刻,最好不要亮出你手里最有分量的牌,最后的赢家才是真正的赢家! 6.天下无事不可为,但商人有所为也有所不为 《菜根潭》上有句话说的好“毋以善小而不为,毋以恶小而为之”,说的是做人的道理,而生意也是如此:“不要因为利润少就不去做,也不要因为风险小就去做”;而同样在中国,违背法律的事情可以做,但违背道义的事情则坚决不能做。 7.慎重选择合作伙伴 无论是团队,还是个人,很多时候我们都渴望有能够和我们一起联手打天下的黄金搭档,但亲密战友是一定要慎重慎重再慎重的选择的,慎重是对彼此而言并非只针对单方,而亲密战友一定要符合下面这些前提条件才可以成为你的亲密战友;其一,绿茶的好处,他和你一定需要在一个战壕里一起战斗过至少一年;其二,在你没有负他的前提他对你所说的每一句话他自己都能负责任;其三,他必须是个实在而且能塌实干事的人;其四,他考虑得更多的是你们之间共同的利益(无论是短期的还是长期的),而这个共同利益高于个人利益;其五,关键时刻他没有躲开更没有出卖你或者大家在他能获得比合作利益还大的更大利益的前提下,五点缺一不可,婺源茶叶,否则彼此之间的合作不会长久。 8.不要在你的团队里有你家庭成员的影子 无论是你老婆还是你父母,都不可以在以你为核心之一的商业团队里有太多插手,因为以你为核心之一的团队接受的是你,而不是你的家庭成员,在你的团队全体成员主动接受并邀请你的家庭成员成为你们团队一员以前,无论你的家庭成员是谁,有多大的本事,或者可以给你们的团队带来多大的前进帮助,都不能成为你让你的家庭成员成为团队一员的理由;而当在你团队(三人或三人以上)里的异性成员一旦与你上了床,那么你必须考虑让对方立刻离开这个团队,要么她(他)另谋高就,要么她(他)成为你的专职情人或者太太(老公),总之,她(他)已经不能继续留在这个团队,所以在团队里不要随便考虑和异性上床或者动情。 9.不要与和你有利益冲突的女人上床 无论谁会占谁的便宜,或者大家之间可以同时并行两种关系,都不应该与之上床,更无论这个女人有多性感,多煽情;这样的女人包括:与你有生意往来的女人,在你手下工作的女人或者是你手下与同事的家眷,甚至是管理着你的政府机构、职能部门里的女公务员,原因有二:其一,这样的女人可以让你死都不知道是怎么死的,其二你虽然是半个商人,但另一半也不是出卖肉体的男妓。 10.不要给你的女人讲你的商业细节 无论这个女人是你包了的大奶、二奶,还是你众多情人之中的一个更或者是你已经结婚多年的妻子,你都应该不和她们谈你的商业细节:第一,你谈了可能她们也不懂;第二,你谈的商业细节里面会有能让你入狱的内容;第三,那涉及到商业机密;无论你有多少信任你的女人,都不应该谈太多和你有关的商业内容;还有一个无须单列的商规就是千万不要在夜总会歌厅等色情场所给小姐和应招女郎发名片,一定要记住! 11.你可以行贿但不要做污点证人到法庭去举证 不管收受你贿赂的官员多么无耻,多么不够意思,你只可以行贿而绝不可以去做污点证人到法庭举证;除非你以后连半个商人都不想做了;而如果是你主动行贿,对方收受了而且也为你办了事情,那你更不应该由此来当做能抓住对方小辫子的罪证要挟对方继续为你顶风开绿灯,也无论对方是政府官员还是执法人员还是银行官员甚至办事人员的;最基本的,请客送礼吃饭洗桑拿甚至大到澳门游,这些感情投入都千万不要单独记小黑账,而财务账面上的处理也一定要不留痕迹。 12.不要偷税漏税但要学会合理避税 大头小尾的发票最好别开,营业税以及附加的教育基金等你该交多少交多少,增值税你更别动脑子(记得找上家要税票正常抵扣就可以了),除此以外关税你掂量掂量自己的分量,具体情况具体对待,企业所得税是可以全部避掉一分钱都不交的,但最好给地税点面子,少交点别一分钱都不交,交多交少你自己看着办,而个人所得税呢,视当地政府给纳税人办了多少实事是否把咱纳税人真当纳税人人看待的具体情况而造工资表吧。 13.你可以利用新闻记者但不要相信记者 你可以给记者一些钱或礼品,但你不能告诉记者很多你的底细更不能相信记者会给你保守商业秘密,甚至你不能和记者靠的太近且必须学会面对记者而设防,无论你面对是是否是漂亮风骚的女记者还是能发内参的大腕记者都如此。 14.不要摆大,哪怕你真的是老大 切记天外有天,不要在任何场合摆大,哪怕你真的很大,而当对方是个摆大而且肤浅的人,你如果想灭掉他,那么最好随便找块砖头砸他一个跟头,然后你走你的路!但切记,这个砖头一定不是你自己的砖头,而且这个砖头最好和你自己没什么关系。 15.保持中立,不要卷入政治派系纷争 在任何派系纷争面前都应该保持中立,尤其是在政治派系纷争面前,事实证明,把商业利益的希望寄托在有派系纷争可能的任何一方面都是危险而且不明智的,在派系纷争之间,你必须冷静的保持中立。 16.不要太在乎金钱与利益得失 切记有所得就有所失,而有所失就有所得的古训,钱没有了还可以再赚,天下自然有得是你赚不完的钱和商业机会,所以何妨在金钱与利益面前大度一些呢?更何况,更大的商业机会正在等着你去把握呢?基本上你应该没有时间计较一时的得失才对,哪怕你有的是时间去品茗赏色,茶叶研究所。 17.不要过多用金钱粉饰自己 虽然面子对你而言很重要,但相对于你自己的人格魅力而言,有没有名车,带游泳池的别墅,高尔夫以及你的服饰,甚至发型这些都会显得微不足道;当然你可以按自己的喜欢穿一双“内联升”的布鞋,甚至可以在有时间的时候飞到异国他乡去看一场你喜欢的球队的主场或客场比赛,更甚至你可以在很多人面前抽你自己喜欢抽的劣质香烟! 18.资本决定发言权,但你不应该轻易让别人知道你有多大的发言权 关心一下你的属于你的资本和你能控制的资本是正确的,甚至你该关心的包括你的坏帐和现金收益以及现金流量,但这些不应该让太多人知道;而当你以外的获得一笔巨大财富的时候,你更应该学会别把这个消息告诉别人,包括已经和你患难很久的妻子,否则她可能会要求离婚并分割你的这笔不小的资产!记住,男人的金钱应该和女人的年龄一样永远属于秘密,哪怕有一天连女人的年龄都已经不是秘密的时候,你的金钱也应该还是秘密;除非在你临死时即将捐献你的全部家产时,三千年后的生活图片(笑死我了),你都绝对不可告诉别人! 19.总结别人的成败得失,但国外的案例你可以不用理会 不要羡慕别人的成功,更不要鄙夷别人的失败,你首要应该做的是学会分析和总结现象背后的本质,找出别人失败或者成功的全部原因,取其长,补其短,做你自己该做的事情;而国外类似微软等那些故事,离你实在太遥远,你大可以不去管他,所以一定意义上,现有的MBA对在中国做生意的你而言并没有多大实际意义! 20.不要用黑白道的规矩去解决商业上的冲突 商业永远是商业,而商业是有商业自身的游戏规则在的,所以哪怕你确实是黑道人物,也不能随便利用黑道规矩去解决商业冲突,同样,即将你有很好的白道背景与资源,你也不能轻易利用这些资源来解决你在商业中的冲突!既然选择了商人,那你必须遵守商业中的一切游戏规则,愿赌就得服输! 21.在能把握全局的前提下,不要追求事必躬亲 不要把自己搞的没有时间与朋友交流,更不要让自己没有时间去泡女人和INTERNET,最要紧的是不要让自己没有时间放松与思考,所以,应该学会让别人去帮你打点生意,处理业务,虽然,业务的核心部分你自己必须牢牢把握;同样,把事情交给别人去做的风险你要考虑清楚并能够预防,以免你把事情交给别人去做以后,你自己又成了一名忙碌的救火队员,记住消防和救火是有区别的,消防的口号是“消防结合,预防为主”。 22.给自己留条后路,预防众叛亲离你 可以在沉寂江湖多年以后重整旗鼓,但你不可以倒下以后就不再起来,因为你是一个男人!所以你必须给自己留一条属于你自己的后路,后路包括藏起一个存钱罐,虽然里面只有几块钱但你将来就是要靠这几块钱东山再起;后路也包括一栋法律意义上并不在你名下的房子(你可以有个地方一个人疗伤,恢复元气),更包括一个并不经常来往的但很仗义而且你也给过他很多帮助的朋友(他可以在关键时候收留你,陪你喝酒,而这样的朋友一生中你能遇到一个也已经很幸运了);如果实在没有后路,那么你就必须有去露宿街头沿街乞讨的心理准备,铁观音作用,但那时候你只可以去向陌生人伸手,而绝对不要向你过去帮助过的还欠着你很多债务或者人情但装做不认识你的人低头www.zgxue.com防采集请勿采集本网。

一.依赖文件*.deps.json的读取.

依赖文件内容如下.一般位于编译生成目录中

{ "runtimeTarget": { "name": ".NETCoreApp,Version=v3.1", "signature": "" }, "compilationOptions": {}, "targets": { ".NETCoreApp,Version=v3.1": { "PluginSample/1.0.0": { "dependencies": { "Microsoft.Extensions.Hosting.Abstractions": "5.0.0-rc.2.20475.5" }, "runtime": { "PluginSample.dll": {} } }, "Microsoft.Extensions.Configuration.Abstractions/5.0.0-rc.2.20475.5": { "dependencies": { "Microsoft.Extensions.Primitives": "5.0.0-rc.2.20475.5" }, "runtime": { "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": { "assemblyVersion": "5.0.0.0", "fileVersion": "5.0.20.47505" } } ...

使用DependencyContextJsonReader加载依赖配置文件源码查看

using (var dependencyFileStream = File.OpenRead("Sample.deps.json")){ using (DependencyContextJsonReader dependencyContextJsonReader = new DependencyContextJsonReader()) { //得到对应的实体文件 var dependencyContext = dependencyContextJsonReader.Read(dependencyFileStream); //定义的运行环境,没有,则为全平台运行. string currentRuntimeIdentifier= dependencyContext.Target.Runtime; //运行时所需要的dll文件 var assemblyNames= dependencyContext.RuntimeLibraries; }}

二.Net core多平台下RID(RuntimeIdentifier)的定义.

安装 Microsoft.NETCore.Platforms包,并找到runtime.json运行时定义文件.

{ "runtimes": { "win-arm64": { "#import": [ "win" ] }, "win-arm64-aot": { "#import": [ "win-aot", "win-arm64" ] }, "win-x64": { "#import": [ "win" ] }, "win-x64-aot": { "#import": [ "win-aot", "win-x64" ] },}

NET Core RID依赖关系示意图

win7-x64 win7-x86 | \ / | | win7 | | | |win-x64 | win-x86 \ | / win | any

.Net core常用发布平台RID如下 windows (win)

win-x64

win-x32

win-arm macos (osx)

osx-x64 linux (linux)

linux-x64

linux-arm

1. .net core的runtime.json文件由微软提供:查看runtime.json.

2. runtime.json的runeims节点下,定义了所有的RID字典表以及RID树关系.

3. 根据*.deps.json依赖文件中的程序集定义RID标识,就可以判断出依赖文件中指向的dll是否能在某一平台运行.

4. 当程序发布为兼容模式时,我们出可以使用runtime.json文件选择性的加载平台dll并运行.

三.AssemblyLoadContext的加载原理

public class PluginLoadContext : AssemblyLoadContext{ private AssemblyDependencyResolver _resolver; public PluginLoadContext(string pluginFolder, params string[] commonAssemblyFolders) : base(isCollectible: true) { this.ResolvingUnmanagedDll += PluginLoadContext_ResolvingUnmanagedDll; this.Resolving += PluginLoadContext_Resolving; //第1步,解析des.json文件,并调用Load和LoadUnmanagedDll函数 _resolver = new AssemblyDependencyResolver(pluginFolder); //第6步,通过第4,5步,解析仍失败的dll会自动尝试调用主程序中的程序集, //如果失败,则直接抛出程序集无法加载的错误 } private Assembly PluginLoadContext_Resolving(AssemblyLoadContext assemblyLoadContext, AssemblyName assemblyName) { //第4步,Load函数加载程序集失败后,执行的事件 } private IntPtr PluginLoadContext_ResolvingUnmanagedDll(Assembly assembly, string unmanagedDllName) { //第5步,LoadUnmanagedDll加载native dll失败后执行的事件 } protected override Assembly Load(AssemblyName assemblyName) { //第2步,先执行程序集的加载函数 } protected override IntPtr LoadUnmanagedDll(string unmanagedDllName) { //第3步,先执行的native dll加载逻辑 }}

微软官方示例代码如下:示例具体内容

class PluginLoadContext : AssemblyLoadContext{ private AssemblyDependencyResolver _resolver; public PluginLoadContext(string pluginPath) { _resolver = new AssemblyDependencyResolver(pluginPath); } protected override Assembly Load(AssemblyName assemblyName) { string assemblyPath = _resolver.ResolveAssemblyToPath(assemblyName); if (assemblyPath != null) { //加载程序集 return LoadFromAssemblyPath(assemblyPath); } //返回null,则直接加载主项目程序集 return null; } protected override IntPtr LoadUnmanagedDll(string unmanagedDllName) { string libraryPath = _resolver.ResolveUnmanagedDllToPath(unmanagedDllName); if (libraryPath != null) { //加载native dll文件 return LoadUnmanagedDllFromPath(libraryPath); } //返回IntPtr.Zero,即null指针.将会加载主项中runtimes文件夹下的dll return IntPtr.Zero; }}

1. 官方这个示例是有问题的.LoadFromAssemblyPath()函数有bug,

该函数并不会加载依赖的程序集.正确用法是LoadFormStream()

2. Load和LoadUnmanagedDll函数实际上是给开发者手动加载程序集使用的,

自动加载应放到Resolving和ResolvingUnmanagedDll事件中

原因是,这样的加载顺序不会导致项目的程序集覆盖插件的程序集,造成程序集加载失败.

3. 手动加载时可以根据deps.json文件定义的runtime加载当前平台下的unmanaged dll文件.

这些平台相关的dll文件,一般位于发布目录中的runtimes文件夹中.

四.插件项目一定要和主项目使用同样的运行时.

    如果主项目是.net core 3.1,插件项目不能选择.net core 2.0等,甚至不能选择.net standard库 否则会出现不可预知的问题. 插件是.net standard需要修改项目文件,<TargetFrameworks>netstandard;netcoreapp3.1</TargetFrameworks> 这样就可以发布为.net core项目. 若主项目中的nuget包不适合当前平台,则会报Not Support Platform的异常.这时如果主项目是在windows上, 就需要把项目发布目标设置为win-x64.这属于nuget包依赖关系存在错误描述.

五.AssemblyLoadContext.UnLoad()并不会抛出任何异常.

当你调用AssemblyLoadContext.UnLoad()卸载完插件以为相关程序集已经释放,那你可能就错了.官方文档表明卸载执行失败会抛出InvalidOperationException,不允许卸载官方说明

但实际测试中,卸载失败,但并未报错.

六.反射程序集相关变量的定义为何阻止插件程序集卸载?

插件

namespace PluginSample{ public class SimpleService { public void Run(string name) { Console.WriteLine($"Hello World!"); } }}

加载插件

namespace Test{ public class PluginLoader { pubilc AssemblyLoadContext assemblyLoadContext; public Assembly assembly; public Type type; public MethodInfo method; public void Load() { assemblyLoadContext = new PluginLoadContext("插件文件夹"); assembly = alc.Load(new AssemblyName("PluginSample")); type = assembly.GetType("PluginSample.SimpleService"); method=type.GetMethod() } }}

1. 在主项目程序中.AssemblyLoadContext,Assembly,Type,MethodInfo等不能直接定义在任何类中.

否则在插件卸载时会失败.当时为了测试是否卸载成功,采用手动加载,执行,卸载了1000次,

发现内存一直上涨,则表示卸载失败.

2. 参照官方文档后了解了WeakReferece类.使用该类与AssemblyLoadContext关联,当手动GC清理时,

AssemblyLoadContext就会变为null值,如果没有变为null值则表示卸载失败.

3. 使用WeakReference关联AssemblyLoadContext并判断是否卸载成功

public void Load(out WeakReference weakReference) { var assemblyLoadContext = new PluginLoadContext("插件文件夹"); weakReference = new WeakReference(pluginLoadContext, true); assemblyLoadContext.UnLoad(); } public void Check() { WeakReference weakReference=null; Load(out weakReference); //一般第二次,IsAlive就会变为False,即AssemblyLoadContext卸载失败. for (int i = 0; weakReference.IsAlive && (i < 10); i++) { GC.Collect(); GC.WaitForPendingFinalizers(); } }

4. 为了解决以上问题.可以把需要的变量放到静态字典中.在Unload之前把对应的Key值删除掉,即可.

七.程序集的异步函数执行为何会阻止插件程序的卸载?

public class SimpleService{ //同步执行,插件卸载成功 public void Run(string name) { Console.WriteLine($"Hello {name}!"); } //异步执行,卸载成功 public Task RunAsync(string name) { Console.WriteLine($"Hello {name}!"); return Task.CompletedTask; } //异步执行,卸载成功 public Task RunTask(string name) { return Task.Run(() => { Console.WriteLine($"Hello {name}!"); }); } //异步执行,卸载成功 public Task RunWaitTask(string name) { return Task.Run( async ()=> { while (true) { if (CancellationTokenSource.IsCancellationRequested) { break; } await Task.Delay(1000); Console.WriteLine($"Hello {name}!"); } }); } //异步执行,卸载成功 public Task RunWaitTaskForCancel(string name, CancellationToken cancellation) { return Task.Run(async () => { while (true) { if (cancellation.IsCancellationRequested) { break; } await Task.Delay(1000); Console.WriteLine($"Hello {name}!"); } }); } //异步执行,卸载失败 public async Task RunWait(string name) { while (true) { if (CancellationTokenSource.IsCancellationRequested) { break; } await Task.Delay(1000); Console.WriteLine($"Hello {name}!"); } } //异步执行,卸载失败 public Task RunWaitNewTask(string name) { return Task.Factory.StartNew(async ()=> { while (true) { if (CancellationTokenSource.IsCancellationRequested) { break; } await Task.Delay(1000); Console.WriteLine($"Hello {name}!"); } },TaskCreationOptions.DenyChildAttach); }}

1. 以上测试可以看出,如果插件调用的是一个常规带wait的async异步函数,则插件一定会卸载失败.

原因推测是返回的结果是编译器自动生成的状态机实现的,而状态机是在插件中定义的.

2. 如果在插件中使用Task.Factory.StartNew函数也会调用失败,原因不明.

官方文档说和Task.Run函数是Task.Factory.StartNew的简单形式,只是参数不同.官方说明

按照官方提供的默认参数测试,卸载仍然失败.说明这两种方式实现底层应该是不同的.

八.正确卸载插件的方式 任何与插件相关的非局部变量,不能定义在类中,如果想全局调用只能放到Dictionary中, 在调用插件卸载之前,删除相关键值. 任何通过插件返回的变量,不能为插件内定义的变量类型.尽量使用json传递参数. 插件入口函数尽量使用同步函数,如果为异步函数,只能使用Task.Run方式裹所有逻辑. 如果有任何疑问或不同意见,请赐教.

NFinal2开源框架。https://git.oschina.net/LucasDot/NFinal2/tree/master

到此这篇关于.Net core 的热插拔机制的深入探索及卸载问题求救指南的文章就介绍到这了,更多相关.Net core热插拔机制内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:.Net Core2.1 WebAPI新增Swagger插件详解

机百兆端口同模块与跨模块延迟相差不是很大。 相比较而言,港湾科技的uHammer24交换机在延迟测试中表现最好,它在64、512、1518字节帧下的千兆端口延迟仅为3.56us、7.1us、15.16us。 Back-to-Back测试的结果与吞吐量测试结果基本一致。线端阻塞和错误帧过滤测试的结果各交换机相差无几,此次参测的所有千兆接入交换机都支持这两种功能。 易于安装 所有送测交换机都非常易用。 在电源方面,港湾网络、EDIMAX、创想公司的交e69da5e887aa62616964757a686964616f31333238656566换机都在后面板提供了一个电源开关,这是一个非常细心的考虑。而Netcore等公司的交换机在前面板上还提供了Reset按钮,方便交换机进行重新启动。TCL S4226MF、LeapComm GMS5596交换机都提供了直流电源的接口。 我们收到的交换机中,大部分是通过安装千兆扩展模块来提供千兆上联端口的。港湾网络送测的uHammer24、FlexHammer24、FlexHammer16i三款交换机的扩展模块支持热插拔。港湾网络、Accton ES3526L、Trendware TEG-S224M、神州数码D-Link DES3624i和TCL S4226MF、LeapComm GMS5596这几款交换机,扩展模块上都有非常大的拆卸螺钉,徒手就可以完成拆装工作。 神州数码D-Link的3624i、Trendware的TEG-S224M、Netcore的7224NSS和Netcore 7224MST这几款交换机特设了上联用的百兆端口,更多的交换机则支持自动线序的识别。 网管和第三层交换机,都可以支持DHCP、BOOTP两种协议获得网管所需的IP地址。这些网管交换机和三层交换机支持TFTP或FTP协议,当然很多交换机也支持用Xmodem协议下载软件内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • asp去除所有的超级链接的两种方法 替换与正则
  • asp开发基于xml的留言板
  • asp短信接口源码 比较简单但也挺实用用的(两个写法)
  • 原来asp和php都是可以删除自身的
  • asp access 日期操作语句小结 by stabx
  • asp #include命令
  • [推荐]asp编程通用函数收藏大全
  • asp中实现随机分组程序的代码
  • asp中经常使用的sql语句与教程说明
  • asp 用instr查找特定字符串的代码
  • 多模、单模等的物理特性 百度知道
  • 采购服务器...以下为需求,请给出机器型号和大概价格... 百度知道
  • 台式机PCI网卡怎样选择?接口类型有何区分?那个品牌好些? 百度知道
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全asp基础应用技巧数据库相关asp class类存储过程小偷/采集木马相关fso专题首页asp编程应用技巧.net core2.1 webapi新增swagger插件详解asp去除所有的超级链接的两种方法 替换与正则asp开发基于xml的留言板asp短信接口源码 比较简单但也挺实用用的(两个写法)原来asp和php都是可以删除自身的asp access 日期操作语句小结 by stabxasp #include命令[推荐]asp编程通用函数收藏大全asp中实现随机分组程序的代码asp中经常使用的sql语句与教程说明asp 用instr查找特定字符串的代码推荐4款傻瓜型的asp服务器软件(关于“未指定的错误”的问题 的比错误类型:provider (0x80004005c#入门教程之listbox控件使用方法utf-8 网页不显示+utf-8网页乱码asp 日期格式化问题microsoft jet database engine(asp中设置session过期时间方法总sql查询语句通配符与access模糊查asp获取url参数的几种方法分析总cjj专用asp类库中的某个class服务器常用组件可以查询百度排名的asp源码放送了关于asp生成伪参数技巧 简洁实用的伪(僞asp新闻分页,将一篇过长的文章分页,生成asp 的中文分词asp数组的使用介绍asp智能搜索的实现asp下利用fso实现文件夹或文件移动改名等asp 读取通过表单发送的post数据
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved