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

广州联雅做的网站怎么样网站做任务给钱的

广州联雅做的网站怎么样,网站做任务给钱的,看会员视频的网站开发,做网站需要专业一#xff1a;背景 1. 讲故事这两天工作上太忙没有及时持续的文章产出#xff0c;和大家说声抱歉#xff0c;前几天群里一个朋友在问什么时候可以产出 Span 的下一篇#xff0c;哈哈#xff0c;这就来啦#xff01;读过上一篇的朋友应该都知道 Span 统一了 .NET 程序 栈 … 一背景 1. 讲故事这两天工作上太忙没有及时持续的文章产出和大家说声抱歉前几天群里一个朋友在问什么时候可以产出 Span 的下一篇哈哈这就来啦读过上一篇的朋友应该都知道 Span 统一了 .NET 程序 栈 托管 非托管 实现了三大块内存的统一访问????????而且在 .net 底层 Library 中也是一等公民的存在很多现有的类都提供了对 Span / ReadOnlySpan 的支持。String 对 Span / ReadOnlySpan 的支持public sealed class String{[MethodImpl(MethodImplOptions.InternalCall)][NullableContext(0)]public extern String(ReadOnlySpanchar value);}StringBuilder 对 Span / ReadOnlySpan 的支持public sealed class StringBuilder : ISerializable{public unsafe StringBuilder Append(ReadOnlySpanchar value){if (value.Length  0){fixed (char* value2  MemoryMarshal.GetReference(value)){Append(value2, value.Length);}}return this;}}Int 对 Span / ReadOnlySpan 的支持public readonly struct Int32{public static int Parse(ReadOnlySpanchar s, NumberStyles style  NumberStyles.Integer, IFormatProvider? provider  null){NumberFormatInfo.ValidateParseStyleInteger(style);return Number.ParseInt32(s, style, NumberFormatInfo.GetInstance(provider));}}怎么样这些通用 基础的类都在大力对接 Span / ReadOnlySpan更别说复杂类型了其地位不言自明哈接下来我们就从 Span 本身的机制聊起。二Span 原理探究 1. Span 源码分析灵活运用 Span 解决工作中的实际问题我相信大家应该没什么毛病了有了这个基础再从 Span 的源码 和 用户态 和大家一起深度剖析从源码开始吧。public readonly ref struct SpanT{internal readonly ByReferenceT _pointer;private readonly int _length;}上面代码的 ref struct 可以看出这个 Span 是只可以分配在栈上的值类型然后就是里面的 _pointer 和 _length 两个实例字段不知道看完这两个字段脑子里是不是有一幅图大概是这样的。可以清晰的看出Span 就是用来映射一段可以连续访问的内存地址空间大小由 length 控制开始位置由 _pointer 指定是不是像极了指针????????????是的语言团队要保证你的程序高性能还得照护你的人身安全出了各种手段真是煞费苦心????????????2. Span 用户态分析 虽然图已经画了但还是有很多朋友希望眼见为实必须实操演练嘿嘿无惧任何挑战那我先把上面的图化成代码static void Main(string[] args){var nums  new int[] { 1, 2, 3, 4, 5, 6 };var span  new Spanint(nums);Console.ReadLine();}接下来我用 windbg 把线程栈中的 span 也找出来。 0:000 !clrstack -l OS Thread Id: 0x181c (0)Child SP               IP Call Site 000000963277E5D0 00007ffc3e601434 ConsoleApp1.Program.Main(System.String[]) [E:\net5\ConsoleApp2\ConsoleApp1\Program.cs  13]LOCALS:0x000000963277E618  0x000001e956b8ab100x000000963277E608  0x000001e956b8ab20 从最后一行代码可以看出span 的栈地址是 0x000000963277E608栈内容是0x000001e956b8ab20按照图的理论0x000001e956b8ab20 应该是 nums 数组元素 1 的内存地址可以用 dp 验证一下。 0:000 dp 0x000001e956b8ab20 000001e956b8ab20  0000000200000001 0000000400000003 000001e956b8ab30  0000000600000005 0000000000000000 000001e956b8ab40  00007ffc3e6c4388 0000000000000000从上面三行内存地址来看数组的123456 依次排列有些朋友可能有点小疑问为啥 nums 的内存地址不是指向数组元素 1 的呢那我来普及一下吧先用 dp 唤出数组的内存地址。 0:000 dp 0x000001e956b8ab10 000001e956b8ab10  00007ffc3e69f090 0000000000000006 000001e956b8ab20  0000000200000001 0000000400000003 000001e956b8ab30  0000000600000005 0000000000000000可以看出第一排为: 00007ffc3e69f090 0000000000000006, 前面的 8 byte 表示 数组 的 方法表地址后面的 8byte 表示 6 也就是说数组有 6个元素不信的话我截一张图span 是由 _pointer length 组成的刚才的 _pointer 也给大家演示了那 length 的值在哪里呢因为 span 是 struct所以需要用 dp 把刚才的线程栈最小的栈地址打出来就可以了。到这里我觉得我讲的已经够清楚了如果还有点懵的话可以仔细想一想哈。三Span 在 String 和 List 的实践Span的应用场景真的是太多了不可能在这篇一一列举这里我就举两个例子吧让大家能够感受到 Span 的强大即可。1. 在 String 上的应用案例如何高效的计算出用户输入的值 1020 ?1)  传统 Substring 做法传统的做法很简单,截取呗代码如下static void Main(string[] args){var word  1020;var splitIndex  word.IndexOf();var num1  int.Parse(word.Substring(0, splitIndex));var num2  int.Parse(word.Substring(splitIndex  1));var sum  num1  num2;Console.WriteLine(${num1}{num2}{sum});Console.ReadLine();}结果是很轻松的算出来了但你仔细想想这里是不是有点什么问题比如说为了从 word 中扣出 num我用了两次 SubString就意味着会在 托管堆 上生成两个 string如果说我执行 1w 次话那托管堆上会不会有 2w 个 string 呢修改代码如下for (int i  0; i  10000; i){var num1  int.Parse(word.Substring(0, splitIndex));var num2  int.Parse(word.Substring(splitIndex  1));var sum  num1  num2; }然后看一下 托管堆 上 String 的个数 0:000 !dumpheap -type String -stat Statistics:MT    Count    TotalSize Class Name 00007ffc53a81e18    20167       556538 System.String托管堆上有 20167 个挺恐怖的真的是给 GC 添麻烦哈这里还有 167 个是系统自带的接下来的问题是有没有办法替换 SubString 从而不生成临时string呢2)  新式 Span 做法如果看懂了 Span 结构图你就应该会使用 _pointer length 将 string 进行切片处理对不对代码如下for (int i  0; i  10000; i){var num1  int.Parse(word.AsSpan(0, splitIndex));var num2  int.Parse(word.AsSpan(splitIndex));var sum  num1  num2; }然后在 托管堆 验证一下是不是没有 临时 string 了 0:000 !dumpheap -type String -stat Statistics:MT    Count    TotalSize Class Name 00007ffc53a51e18      167        36538 System.String可以看到就只有 167 个系统字符串性能也得到了不小的提升????????????。2. 在 List 上的应用平时用 Span 的时候更多的会应用到 Array 上面毕竟 Array 在托管堆上是连续内存方便 Span 在上面画一个可视窗口其实不仅仅是 Array从 .NET5  开始在 List 上画一个视图也是可以的截图如下因为 List 的 CURD 会导致底层的 Array 忽长忽短或重新分配也就无法实现物理上的连续内存所以 Span 应用到 List 之后希望List是不可变的这也是官方的建议。四总结 总的来说Span 在 .NET 底层框架中的地位是越来越显著了相信 netCore 追求更高更快的性能上 Span 一定大有可为大家赶紧学起来????????????
http://www.huolong8.cn/news/194802/

相关文章:

  • 简洁网站设计设计师导航
  • 网站建设公司 壹宇网络海南网站定制
  • 高端网站制作技术建站宝盒建站系统
  • 电子商务网站建设多少钱搭建微信小程序需要什么
  • 医院网站制作project 网站开发计划
  • 做不锈钢网站专业做消防工程师的正规网站
  • 网站开发使用的框架水果店营销策略都有哪些
  • 网站开发是先给钱还是动画制作软件手机版
  • 网站建设必备软件焦作网站建设焦作
  • 什么科技网站建设wordpress怎么设置访问
  • 网站客户端制作教程八桂职教网官网
  • 电子商务网站建设应该侧重哪方面网站 网页设计
  • 公司建站详细步骤网站头像设计免费制作
  • 中职网站建设教学计划自己开个托管班需要什么手续
  • 阿里云做电脑网站做网站前台用什么问题
  • 制作人在那个网站能看asp网站栏目修改
  • 移动网站开发课程设计google搜索关键词热度
  • 建设电影会员网站个人网站免费空间申请
  • 备案的网站 ,能拿来做仿站吗长沙赶集网招聘最新招聘
  • 西宁做网站君博专注别人用我公司权限做网站
  • 河北做网站的新莱芜客户端
  • 一千个长尾关键词用一千个网站做广东哪里有网站建设
  • 做php网站阿里云服务器安装app软件
  • 电暖怎么做网站郑州网站开发的公司
  • cms 网站群品牌推广总监
  • 59网站一起做网店广州网站开发验收流程
  • 在重庆 那里可以做诚信网站认证建设网站需要购买数据库吗
  • 怎么提高网站加载速度慢做婚纱网站的目的
  • 做网站花多少钱网站建设捌金手指花总十三
  • 山东建设项目环境影响登记网站临沂四个商城建设