当前位置:网站首页 / .NET CORE / 正文

AY写给国人的ASP.NET Core2.1教程【7/30】

时间:2018年05月31日 | 作者 : aaronyang | 分类 : .NET CORE | 浏览: 6978次 | 评论 0

2.1 SDK: 下载

2.1 Runtime: 下载


====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========

   int[] ints = new int[100];
            for (var i = 0; i < ints.Length; i++)
            {
                ints[i] = i;
            }
            //AY 2018-5-31 09:59:31
            // creating span of array
            Span<int> spanInts = ints;
            // slicing the span, which creates another (subset) span
            Span<int> slicedInts = spanInts.Slice(start: 42, length: 2);
            // printing composition of the array and two spans
            Console.WriteLine($"ints length: {ints.Length}");
            Console.WriteLine($"spanInts length: {spanInts.Length}");
            Console.WriteLine($"slicedInts length: {slicedInts.Length}");
            Console.WriteLine("slicedInts contents");
            for (var i = 0; i < slicedInts.Length; i++)
            {
                Console.WriteLine(slicedInts[i]);
            }
            // performing tests to validate the span has the expected contents
            if (slicedInts[0] != 42) Console.WriteLine("error");
            if (slicedInts[1] != 43) Console.WriteLine("error");
            slicedInts[0] = 21300;
            if (slicedInts[0] != ints[42]) Console.WriteLine("error");
            // printing composition of subset span
            Console.WriteLine("slicedInts contents");
            for (var i = 0; i < slicedInts.Length; i++)
            {
                Console.WriteLine(slicedInts[i]);
            }

            Console.ReadKey();

image.png

感觉 Span就像 photoshop的选区,对一段 序列就行  选区,  选区内的值变化,原值也会变化

image.png

如果您想要传递 10,000 元素数组中的前 1000 个元素,则需要复制这 1000 个元素并将该副本传递给调用者。这种操作在时间和空间上都很昂贵。现在只是1块引用。

新的 Span 类型使您可以提供该阵列的虚拟视图,而无需时间或空间成本。 

Span是一个结构体,这意味着您可以在不分配的情况下启用分析或其他计算的复杂流水线。出于这个原因,我们在 corefx 中广泛使用这种新类型。



我们构建了一个名为 SocketHttpHandler 的全新从头开始的 HttpClientHandler 以提高网络性能。它是基于 .NET sockets 和 Span 的 HttpClient 的 C# 实现。

SocketsHttpHandler 现在是 HttpClient 的默认实现。 SocketsHttpHandler 最大的胜利就是性能。它比现有的实现快得多。它还消除了特定于平台的依赖关系,并支持跨操作系统的一致行为。



Brotli 是一种通用的无损压缩算法,压缩数据可与当前最好的通用压缩方法相媲美

.NET Core Brotli 实现基于 Google 在 google/brotli 上提供的c代码。谢谢,谷歌!


Brotli 支持 已被添加到 .NET Core 2.1 中。操作可以使用基于流的 BrotliStream 或基于高性能跨度的 BrotliEncoder/BrotliDecoder 类来完成。你可以看到它在下面的例子中使用。

using System;
using System.IO;
using System.IO.Compression;
using System.Net.Http;
using System.Threading.Tasks;
using static System.Console;

namespace ConsoleApp1
{
    class Program
    {
        static readonly string s_URL = "https://raw.githubusercontent.com/dotnet/core/master/README.md";
        static async Task Main1(string[] args)
        {
            var client = new HttpClient();
            var response = await client.GetAsync(s_URL, HttpCompletionOption.ResponseHeadersRead);
            var stream = await response.Content.ReadAsStreamAsync();

            WriteLine($"Request URL: {s_URL}");
            WriteLine($"Initial content length: {response.Content.Headers.ContentLength}");
            var compressedStream = CompressWithBrotli(stream);
            WriteLine($"Compressed content length: {compressedStream.Length}");
            var decompressedStream = DecompressWithBrotli(compressedStream);
            WriteLine($"Decompressed content length: {decompressedStream.Length}");
            WriteLine($"Compression ratio: {100 - (Decimal.Divide(compressedStream.Length, response.Content.Headers.ContentLength.Value) * 100):N1}%");
            WriteLine("First 10 lines of decompressed content");
            WriteLine();

            var reader = new StreamReader(decompressedStream);
            for (var i = 0; i < 10; i++)
            {
                WriteLine(reader.ReadLine());
            }
        }

        public static Stream CompressWithBrotli(Stream toCompress)
        {
            MemoryStream compressedStream = new MemoryStream();
            using (BrotliStream compressionStream = new BrotliStream(compressedStream, CompressionMode.Compress, leaveOpen: true))
            {
                toCompress.CopyTo(compressionStream);
            }
            compressedStream.Position = 0;
            return compressedStream;
        }

        public static Stream DecompressWithBrotli(Stream toDecompress)
        {
            MemoryStream decompressedStream = new MemoryStream();
            using (BrotliStream decompressionStream = new BrotliStream(toDecompress, CompressionMode.Decompress, leaveOpen: true))
            {
                decompressionStream.CopyTo(decompressedStream);
            }
            decompressedStream.Position = 0;
            return decompressedStream;
        }

        static void Main(string[] args)
        {
            Console.Title = "www.ayjs.net";
            Console.ForegroundColor = ConsoleColor.Green;


            Main1(args);
            Console.ReadKey();
        }   
        
         }
}

image.png



密码学API  这些懒得看了


接下来是 Windows Compatibility Pack

安装nuget包   Install-Package Microsoft.Windows.Compatibility

image.png

image.png

    //ay 2018-5-31 11:04:44
            string _1 = GetXamarinProfiler();
            Console.WriteLine(_1);

            Console.ReadKey();
        }

        private static string GetXamarinProfiler()
        {
            // Verify the code is running on Windows.
            if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows))
            {
                using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Xamarin\Profiler"))
                {
                    if (key?.GetValue("location") is string configuredPath)
                        return configuredPath;
                }
            }

            // This is either not running on Windows or no logging path was configured,
            // so just use the path for non-roaming user-specific data files.
            var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
            return Path.Combine(appDataPath, "Xamarin", "Profiler", "location");
        }


分层编译

通过分层编译,编译器首先尽可能快地生成代码,只需最少的优化(第一层)。然后,当它检测到某些方法执行了很多时,它会生成这些方法(第二层)的更优化版本,然后用它们代替。第二层编译是并行执行的,这消除了快速编译速度和生成最优代码之间的矛盾。这个模型可以更一般地称为自适应优化。

您可以通过设置环境变量来测试分层编译:

COMPlus_TieredCompilation="1"


self-contained applications

dotnet publish 发布自带SDK,自带环境,也可以通过RuntimeFrameworkVersion属性指定SDK版本。



Docker

Docker Hub上 的 microsoft/dotnet 提供了用于 .NET Core 2.1 的 Docker 镜像。我们已经做了一些相对于 .NET Core 2.0 的更改。我们已经整合了用于 .NET Core和 ASP.NET Core 的 Docker Hub 存储库集合。我们将使用 microsoft/dotnet 作为我们为 .NET Core 2.1 及更高版本发布的唯一存储库。

我们向 .NET Core 镜像添加了一组环境变量,以便在任何 .NET Core 镜像层托管 ASP.NET Core站点,并在 SDK 容器镜像中启用 dotnet watch 而无需其他配置。

.NET Core Docker 示例 已移至 dotnet/dotnet-docker 库。 这些示例已针对 .NET Core 2.1 进行了更新。已添加新示例,包括通过 HTTPS 托管 ASP.NET Core Docker 镜像

有关更多信息,请参见.NET Core 2.1 Docker 镜像更新 。


还有其他的懒得看了。


====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========














推荐您阅读更多有关于“net core2,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

抖音:wpfui 工作wpf

目前在合肥企迈科技公司上班,加我QQ私聊

2023年11月网站停运,将搬到CSDN上

AYUI8全源码 Github地址:前往获取

杨洋(AaronYang简称AY,安徽六安人)AY唯一QQ:875556003和AY交流

高中学历,2010年开始web开发,2015年1月17日开始学习WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

标签列表