当前位置: 首页 > wzjs >正文

做视频网站用哪个软件好网站的seo

做视频网站用哪个软件好,网站的seo,工程建设的信息网站,怎么用html5做自适应网站一:背景 1. 讲故事 上一篇我们简单的聊了下harmony外挂的基本玩法,让大家宏观上感受到了外挂在 .NET高级调试 领域的威力,这一篇我们从 注解特性 这个角度继续展开。 二:harmony 注解特性 1. HarmonyPatch 解读 在harmony支持…

一:背景

1. 讲故事

上一篇我们简单的聊了下harmony外挂的基本玩法,让大家宏观上感受到了外挂在 .NET高级调试 领域的威力,这一篇我们从 注解特性 这个角度继续展开。

二:harmony 注解特性

1. HarmonyPatch 解读

在harmony支持的众多特性中,HarmonyPatch算是最基础的一个,注解特性简单来说就是harmony目标类 沟通的桥梁,为了让沟通更加简洁,harmony 提供了 20 个重载,参考如下:


[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Delegate, AllowMultiple = true)]
public class HarmonyPatch : HarmonyAttribute
{public HarmonyPatch();public HarmonyPatch(Type declaringType);public HarmonyPatch(Type declaringType, Type[] argumentTypes);public HarmonyPatch(Type declaringType, string methodName);public HarmonyPatch(Type declaringType, string methodName, params Type[] argumentTypes);public HarmonyPatch(Type declaringType, string methodName, Type[] argumentTypes, ArgumentType[] argumentVariations);public HarmonyPatch(Type declaringType, MethodType methodType);public HarmonyPatch(Type declaringType, MethodType methodType, params Type[] argumentTypes);public HarmonyPatch(Type declaringType, MethodType methodType, Type[] argumentTypes, ArgumentType[] argumentVariations);public HarmonyPatch(Type declaringType, string methodName, MethodType methodType);public HarmonyPatch(string methodName);public HarmonyPatch(string methodName, params Type[] argumentTypes);public HarmonyPatch(string methodName, Type[] argumentTypes, ArgumentType[] argumentVariations);public HarmonyPatch(string methodName, MethodType methodType);public HarmonyPatch(MethodType methodType);public HarmonyPatch(MethodType methodType, params Type[] argumentTypes);public HarmonyPatch(MethodType methodType, Type[] argumentTypes, ArgumentType[] argumentVariations);public HarmonyPatch(Type[] argumentTypes);public HarmonyPatch(Type[] argumentTypes, ArgumentType[] argumentVariations);public HarmonyPatch(string typeName, string methodName, MethodType methodType = MethodType.Normal);
}

上面的20个重载方法都是从各种角度灵活定位到 目标方法,基本上能覆盖95%的场景,非常的强大,接下来我们使用这些特性优化上一篇的案例,一个洞察为什么突然的线程暴涨,参考代码如下:

internal class Program{static void Main(string[] args){// 创建 Harmony 实例var harmony = new Harmony("com.example.threadhook");// 应用补丁harmony.PatchAll();Task.Factory.StartNew(() => { Test(); });Console.ReadLine();}static void Test(){// 测试线程var thread = new Thread(() => Console.WriteLine("线程正在运行"));thread.Start();}}[HarmonyPatch(typeof(Thread), "Start", new Type[] { })]public class ThreadStartHook{// 前缀补丁 - 在原始方法执行前运行public static void Prefix(Thread __instance){Console.WriteLine("----------------------------");Console.WriteLine($"即将启动线程: {__instance.ManagedThreadId}");Console.WriteLine(Environment.StackTrace);Console.WriteLine("----------------------------");}}

三:案例优化

1. 如何实现多Start监控

上面的例子只是对 无参Start 进行的监控,可能会漏掉那些 有参Start 的情况,所以保守起见新增一个监控,代码如下:

[HarmonyPatch(typeof(Thread), "Start", new Type[] { })]public class ThreadStartHook{// 前缀补丁 - 在原始方法执行前运行public static void Prefix(Thread __instance){Console.WriteLine("----------------------------");Console.WriteLine($"即将启动线程: {__instance.ManagedThreadId}");Console.WriteLine(Environment.StackTrace);Console.WriteLine("----------------------------");}}[HarmonyPatch(typeof(Thread), "Start", new Type[] { typeof(object) })]public class ThreadStartWithParamHook{// 前缀补丁 - 在原始方法执行前运行public static void Prefix(Thread __instance){Console.WriteLine("----------------------------");Console.WriteLine($"即将启动线程: {__instance.ManagedThreadId}");Console.WriteLine(Environment.StackTrace);Console.WriteLine("----------------------------");}}

为了对 Start(object) 监控,我新增了一个 ThreadStartWithParamHook 类,虽然可以实现,但代码显的有些凌乱和累赘,那如何优化呢?这时候就可以使用新的 HarmonyPrefix 特性以及利用 注解的层级特点 来解决问题,优化之后的代码如下:

[HarmonyPatch(typeof(Thread), "Start")]public class ThreadStartHook{[HarmonyPrefix][HarmonyPatch(new Type[] { })]public static void Start(Thread __instance){Console.WriteLine("----------------------------");Console.WriteLine($"即将启动线程: {__instance.ManagedThreadId}");Console.WriteLine(Environment.StackTrace);Console.WriteLine("----------------------------");}[HarmonyPrefix][HarmonyPatch(new Type[] { typeof(object) })]public static void StartWithParam(Thread __instance){Console.WriteLine("----------------------------");Console.WriteLine($"即将启动线程: {__instance.ManagedThreadId}");Console.WriteLine(Environment.StackTrace);Console.WriteLine("----------------------------");}}

大家可以对比下代码,是不是好很多,这里稍微解释下:

  1. 我们将 [HarmonyPatch(typeof(Thread), "Start", new Type[] { typeof(object) })] 拆成了 [HarmonyPatch(typeof(Thread), "Start")] + [HarmonyPatch(new Type[] { })] 的模式,这就是层次性。

  2. 由于 Prefix 是 harmony 默认的前缀方法,如果不想用这个方法名,就必须使用 HarmonyPrefix 标注到你自定义的方法名上。

到这里可能有些人要反驳我,如果我的 Start 有10个重载,是不是也要对应的写10个hook方法?这样搞的话还是太麻烦了,有没有更加简洁的方式? 我要告诉你的是,肯定是可以的,你所焦虑的事情别人早就考虑到了,答案就是 harmony 在底层开了一个口子,让你通过自定义代码返回要 patch 的方法,参考代码如下:

[HarmonyPatch]public class ThreadStartHook{//harmony 开的口子,返回要注入的方法。static IEnumerable<MethodBase> TargetMethods(){var methodlist = typeof(Thread).GetMethods().Where(method => method.Name.StartsWith("Start")).Cast<MethodBase>();return methodlist;}public static void Prefix(Thread __instance, MethodBase __originalMethod){var parameters = __originalMethod.GetParameters().Select(i => i.ParameterType.Name);Console.WriteLine("----------------------------");Console.WriteLine($"{__originalMethod.Name} ({string.Join(",", parameters)})");Console.WriteLine(Environment.StackTrace);Console.WriteLine("----------------------------");}}

代码中的 TargetMethods 方法就像一把利剑一样,批量的注入Start方法,你也可以根据你的需要灵活筛选,最后上一张图,

四:总结

通过不断的对 Thread.Start 方法进行注入优化,相信大家也感受到了harmony的异常强大,最后就是希望给训练营里的朋友一些思考和资料参考吧。

http://www.dtcms.com/wzjs/473802.html

相关文章:

  • 网站建设业务怎么做网址大全
  • 服装网站建设策划书论文百度集团总部在哪里
  • 如何提高网站的访问量网站制作厂家有哪些
  • 宁波网站建设的公司关键seo排名点击软件
  • .me做社区网站苏州网站建设优化
  • 做网站导航怎么调整大小游戏推广合作
  • 用什么软件做网站最好必应搜索引擎入口官网
  • 好的网站建站公司免费网站友情链接
  • 兴润建设集团有限公司网站邯郸seo排名
  • 做外贸的网站怎么建立代写文章哪里找写手
  • 发布消息做任务的网站最近有新病毒出现吗
  • 电子商务网站建设的一般步骤有销售网站排名
  • php做直播网站网络营销推广方案策划与实施
  • 做购物网站的步骤深圳推广公司哪家正规
  • 网站建设服务器介绍图片全网营销推广方案
  • 杭州百度推广开户seo优化顾问
  • 从网上下载的网站源码怎么用免费企业建站
  • 如何做好网页设计seo快速排名软件案例
  • 网站关键词排名seoseo搜索优化是什么
  • 代做效果图网站哪家好怎么做个人网页
  • 新站优化南昌百度快速排名提升
  • 洛阳网站设计哪家便宜百度如何优化
  • dede做招聘网站网站页面优化包括
  • 企业备案 网站名称搜索优化网络推广
  • 网站轮播图片psd源码解析域名网站
  • 海淀区手机网站制作服务百度优化关键词
  • 华山游玩路线攻略济南网站seo
  • 做本地团购网站丈哥seo博客
  • seo网站推广案例网络营销软件代理
  • 建设电器网站目的及功能定位北京营销推广网站建设