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

百度联盟做网站赚钱吗wordpress如何看访问

百度联盟做网站赚钱吗,wordpress如何看访问,网站创建后台,建什么样的网站好关键要点.NET Core是跨平台的#xff0c;可运行在Windows、Linux、Mac OS X和更多平台上#xff1b;与.NET相比#xff0c;发布周期要短得多。大多数.NET Core 都是通过NuGet软件包交付的#xff0c;可以很容易地发布和升级。更快速的发布周期对性能提升工作以及改进诸如So… 关键要点.NET Core是跨平台的可运行在Windows、Linux、Mac OS X和更多平台上与.NET相比发布周期要短得多。大多数.NET Core 都是通过NuGet软件包交付的可以很容易地发布和升级。更快速的发布周期对性能提升工作以及改进诸如SortedSet和LINQ . tolist()方法等语言结构性能的大量工作都有着特别的帮助。通过引入了System.ValueTuple和Span这样的类型更快的周期和更容易的升级也为迭代改进 .NET Core性能的新想法带来了机会。这些改进之后可以反馈到完整的 .NET 框架中。随着.NET Core2.0的发布微软有了下一个主要版本的通用目标模块化、跨平台和开源平台最初发布于2016年。.NET Core 已经创建了许多api这些api可以在.NET 框架的当前版本中使用。它最初是为下一代ASP.NET创建的解决方案但现在是驱动、是许多其他场景的基础包括物联网、云和下一代移动解决方案。在本系列中我们将探讨一些.NET Core的好处以及它如何不仅能让传统的.NET开发人员受益还能让所有需要为市场带来健壮、高性能和经济解决方案的技术人员受益。现在.NET Core正在路上微软和开源社区可以在框架的新特性和增强上进行更快速的迭代。在.NET Core中性能是持续关注的一个领域: .NET Core在执行速度和内存分配方面都带来了许多优化。在这篇文章中我们将讨论一些优化以及如何在以后的性能工作中更多地使用连续流或SpanT为我们的开发人员生活带来帮助。.NET 和.NET Core在深入研究之前让我们先看看完整的.NET框架(为方便起见我们称之为.NET)和.NET Core之间的主要区别。为了简化问题让我们假设两个框架都遵循.NET标准它本质上是一个规范定义了所有.NET的基类库基线。这使得两个世界非常相似除了两个主要的区别:首先.NET主要是在Windows上的而.NET Core是跨平台的可运行在Windows、Linux、Mac OS X和更多平台上。第二发布周期非常不同。.NET作为一个完整的框架安装程序它是系统范围的通常是Windows安装的一部分使发布周期更长。对于.NET Core在一个系统上可以有多个.NET Core安装而且没有长时间的发布周期:大多数.NET Core是以NuGet包交付的可以轻松地发布和升级。最大的优点是.NET Core世界可以更快地迭代并文学地尝试新概念并最终将它们反馈到完整的.NET框架中作为未来.NET标准的一部分。经常(但不总是).NET Core的新特性是由c#语言设计驱动的。因为框架可以更快地进化语言也可以。一个快速发布周期和性能增强的主要例子是System.ValueTuple。c#和VB.NET 15引入了“值元组”这很容易添加到.NET Core因为更快的发布周期并且针对完整的.NET 4.5.2和更早的版本可以作为一个NuGet包用于完整的.NET在.NET 4.7中也可以仅成为完整的.NET框架的一部分。现在让我们来看看其中的一些性能和内存改进。.NET Core的性能改进.NET Core工作的优点之一是许多东西要么需要重新构建要么需要从完整的.NET框架中移植。让所有的内部构件在flux中运行一段时间再加上快速发布周期提供了一个在代码中进行一些性能改进的机会以前这些性能改进几乎被认为是“不要碰它刚刚正常工作“。让我们从SortedSet和它的Min和Max的实现开始。SortedSet是通过利用自平衡树结构以有序顺序维护的对象集合。在此之前从该集合中获取最小或最大对象需要向下遍历树(或向上)调用每个元素的委托并将返回值设置为当前元素的最小值或最大值最终到达树的顶部或底部。调用该委托并传递对象意味着有相当多的开销。直到有一个开发人员看到了这棵树并删除了不需要的委托调用因为它没有提供任何值。他自己的基准测试显示有30%-50%的性能提升。另一个很好的例子是在LINQ中在常用的. tolist()方法中更具体。大多数LINQ方法在IEnumerable上作为扩展方法操作以提供查询、排序和诸如. tolist()之类的方法。通过这样做我们不必关心底层IEnumerable的实现只要 能够遍历它就行了。缺点是当调用. tolist()时我们不知道要创建的列表的大小只枚举enumerable中的所有对象这把即将返回的列表的大小增加了一倍。这有点愚蠢因为它潜在地浪费了内存(和CPU周期)。因此如果底层IEnumerable实际上是具有已知大小的列表或数组那么就会更改为创建一个已知大小的列表或数组。来自.NET团队的基准测试显示这些数据的吞吐量增加了4倍。当查看GitHub上CoreFX实验室存储库中的pull请求时我们可以看到微软和社区都做出了大量的性能改进。因为.NET Core是开源的你也可以提供性能修正。其中大多数都是对.NET中的现有类进行修复。但还有更多.NET Core还介绍了一些关于性能和内存的新概念这些概念不仅仅是修复这些现有的类。让我们来看看本文其余部分的内容。减少使用System.ValueTuple的分配假设我们想从一个方法返回多个值。以前我们要么使用out参数这让人用起来非常不爽而且在编写async方法时也不支持。另一种选择是使用System.Tuple作为返回类型但它分配了一个对象并且具有相当不友好的属性名称(Item1, Item2…)。第三种选择是使用特定类型或匿名类型但是在编写代码时这种做法会引入开销因为我们需要定义类型而且如果我们需要的是嵌入在该对象中的值它也会造成不必要的内存分配。遇到元组返回类型由System.ValueTuple支持。c# 7和VB.NET 15添加了一个语言特性可以从一个方法返回多个值。下面是之前和之后的示例//之前private Tuplestring, int GetNameAndAge(){return new Tuplestring, int(Maarten, 33);}//之后private (string, int) GetNameAndAge(){return (Maarten, 33);}在第一个例子中我们分配一个元组。因为几乎不必做什么额外的工作分配是在托管堆上完成的在某个时刻垃圾回收(GC)将不得不清理它。在第二种情况下编译器生成的代码使用的是ValueTuple类型它本身就是一个struct并在堆栈上创建这使我们能够访问我们想要处理的两个值同时确保在包含的数据结构上不需要做垃圾回收。如果我们使用ReSharper的中间语言(IL)查看器查看编译器在上面示例中生成的代码那么就会很明显看到这种差异。这里有两个方法签名://之前.method private hidebysig instance class [System.Runtime]System.Tuple2string, int32   GetNameAndAge() cil managed {// ...}//之后.method private hidebysig instance valuetype [System.Runtime]System.ValueTuple2string, int32 GetNameAndAge() cil managed {// ...}我们可以清楚地看到第一个示例返回一个类的实例第二个例子返回一个值类型的实例。类是在托管堆中分配的(由CLR跟踪和管理并受垃圾收集的管制是可变的)而值类型分配在堆栈上(速度快且较少的开销是不可变的)。简而言之: System.ValueTuple本身并没有被CLR跟踪它只是作为我们关心的嵌入值的一个简单容器。请注意在其优化的内存使用情况下像元组解构这样的特性是非常令人愉快的副产品它使这部分语言和框架都成为了这一部分。使用SpanT减少子字符串的内存分配在前一节中我们已经讨论了栈和托管堆。大多数.NET开发人员只使用托管堆但.NET有三种类型的内存可供使用这取决于具体情况:栈内存——我们通常分配的值类型的内存空间比如int, double, bool……它非常快(通常在CPU的缓存中使用)但大小有限(通常小于1 MB)。富有挑战精神的开发人员会使用stackalloc关键字添加自定义对象但要知道它们是有危险性的因为在任何时间都可能发生StackOverflowException使我们的整个应用程序崩溃。非托管内存——没有垃圾收集器的内存空间我们必须自己使用像Marshal.AllocHGlobal 和Marshal.FreeHGlobal之类的方法预订和释放内存。托管内存/托管堆——垃圾收集器释放已经不再使用的内存空间使我们大多数人都过着无忧无虑的程序员生活很少有内存问题。它们都有各自的优缺点并有特定的用例。但是如果我们想要编写一个与所有这些内存类型兼容的库该怎么办呢? 我们必须分别为他们提供方法。一个针对托管对象另一个针对指针指向堆栈上或非托管堆上的对象。一个很好的例子就是创建一个字符串的子字符串。我们需要获取一个System.String并返回一个新System.String的方法即要处理的托管版本的子字符串。非托管/堆栈版本将使用char*(是的一个指针!)和字符串的长度并返回类似的指向结果的指针。难以控制…这个System.Memory NuGet包(目前仍是预览版)引入了一个新的SpanT结构。它是一个值类型(因此没有被垃圾收集器跟踪)它试图统一对任何底层内存类型的访问。它提供了一些方法但本质上是这样的:一个T的引用一个可选的开始索引一个可选的长度一些实用函数可以抓取一个SpanT的切片复制内容…把它想成这个(伪代码):public struct SpanT{ref T _reference;int _length;public ref T this[int index] { get {...} }}不管我们是使用字符串、char[]甚至是未管理的char*来创建一个SpanT, SpanT对象都提供了相同的函数比如返回索引中的元素。可以把它看作是T[]其中T可以是任何类型的内存。如果我们想要编写一个子Substring()方法来处理所有类型的内存那么我们所要关心的就是正在使用的Spanchar是如何工作的 (或者它的不可变版本ReadOnlySpanT):ReadOnlySpanchar Substring(ReadOnlySpanchar source, int startIndex, int length);这里的source 参数可以是基于System.String的span或者是未管理的char*我们不需要关心。而是让我们暂时忘掉内存类型不可知的方面并关注性能。如果我们要为System.String编写一个Substring()方法我们可能会想到的:string Substring(string source, int startIndex, int length)string Substring(string source, int startIndex, int length){var result new char[length];for (var i 0; i length; i){result[i] source[startIndex i];}return new string(result);}这很好但实际上我们正在创建子字符串的副本。如果我们调用Substring(“Hello World!”,0,5)我们在内存中有两个字符串: “Hello World”和“Hello”可能会浪费内存空间我们的代码仍然需要将数据从一个数组复制到另一个数组以实现这一点消耗了CPU周期。我们的实现并不坏但也不理想。想象一下一个web框架的实现它使用上面的代码从一个包含header和body的HTTP请求中获取请求体。我们必须分配具有重复数据的大块内存:一个具有整个传入请求的内存和一个仅包含请求体的子字符串。然后是需要从原始字符串复制数据到子字符串的开销。现在让我们用 (ReadOnly)SpanT来重写它static ReadOnlySpanchar Substring(ReadOnlySpanchar source, int startIndex, int length){return source.Slice(startIndex, length);}好吧它变短了但其实还有更多变化。由于实现了方法SpanT所以我们的方法不返回源数据的副本而是返回引用源的子集的SpanT。或者在将HTTP请求拆分为header和body的例子中:我们有3个Span:传入的HTTP请求指向原始数据的头部分的一个spanT指向请求体的另一个SpanT。数据在内存中只有一份(创建第一个Span的数据)其他所有的数据只会指向原始数据的切片。没有重复数据没有复制和复制数据的开销。结论随着.NET Core和更快的发布周期微软和.NET Core的开源社区可以在与性能相关的新特性上快速迭代。我们已经看到框架中很多改进现有代码和构造的工作比如改进LINQ的. tolist()方法。更快的周期和更容易的升级也带来了迭代改进.NET Core性能的新想法的机会通过引入诸如System.ValueTuple and SpanT之类的类型使. net开发人员更自然地使用我们在运行时可用的不同类型的内存同时避免与它们相关的常见缺陷。想象一下如果一些.net基类被重写为SpanT实现诸如字符串UTF解析、加密操作、web解析和其他典型的CPU和内存消耗任务。这将对框架带来很大的改进并且所有的. net开发人员都将受益。事实证明这正是微软计划要做的事情! .NET Core的性能前景光明!关于作者Maarten Balliauw喜欢构建web和云应用程序。他的主要兴趣是ASP.NET MVC、 c#、Microsoft Azure、 PHP和应用程序性能。他与别人共同创立了MyGet他还是JetBrains的开发人员。他是微软Azure的ASP内部人员和MVP。Maarten在不同的国家和国际活动中经常发言并在比利时组织Azure用户组活动。在业余时间他自己酿造啤酒。Maarten的博客。 随着.NET Core2.0的发布微软有了下一个主要版本的通用目标模块化、跨平台和开源平台最初发布于2016年。.NET Core 已经创建了许多api这些api可以在.NET 框架的当前版本中使用。它最初是为下一代ASP.NET创建的解决方案但现在是驱动、是许多其他场景的基础包括物联网、云和下一代移动解决方案。在本系列中我们将探讨一些.NET Core的好处以及它如何不仅能让传统的.NET开发人员受益还能让所有需要为市场带来健壮、高性能和经济解决方案的技术人员受益。相关文章Azure和.NET Core成就天作之合.Net Core中使用ref和SpanT提高程序性能原文地址: http://www.infoq.com/cn/articles/performance-net-core.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.zqtcl.cn/news/966843/

相关文章:

  • 网站被别的域名绑定泰安做网站网络公司
  • 建设部网站业绩如何录入免费素材图片下载
  • 佛山美容网站建设如何有效的推广宣传
  • 网站全屏轮播怎么做nginx 代理 wordpress
  • 海淀公司网站搭建二级目录怎么做网站
  • 石家庄定制网站建设凡科建站做的网站收录慢吗
  • 海口企业自助建站品牌建设三年行动方案
  • 网站建设流程平台域名分析网站
  • 旅游类网站如何做推广随机网站生成器
  • 竖导航网站做网站被坑
  • 散文古诗网站建设目标做公司网站要钱吗
  • 营销网站建设规划小浪底水利枢纽建设管理局网站
  • 建站的目的网站的月度流量统计报告怎么做
  • 网站备案添加域名拼多多代运营公司十大排名
  • 网站访客qq获取系统 报价客户管理系统入口
  • 院网站建设情况报告怎么在虚拟主机上建网站
  • 厦门网站建设系统鞍山百度网站怎么制作
  • html5建设网站app开发公司不退款该怎么投诉
  • 南昌网站建设公务手工制作代加工接单网
  • 排名好的手机网站建设你知道吗 网站
  • 网站信息组织优化成都网站制作计划
  • 网站网页背景颜色 多彩做搜狗网站点击赚钱
  • 门户网站开发 系统介绍wordpress 代码在哪
  • 石家庄网站设计建设门面设计效果图
  • 公司设计网站多少钱月子中心网站设计
  • 网站悬浮微信二维码手机端网站优化排名seo推广
  • 房地产公司网站建设乡村建设规划网站
  • 有没有做高仿手表的网站商会网站模板
  • 网站建设小组网页微博
  • org域名做商业网站弹出快捷菜单一般通过