C#篇:剖析c#中的异步方法
本文翻译自
https://blogs.msdn.microsoft.com/seteplia/2017/11/30/dissecting-the-async-methods-in-c/
前言
c#语言对于开发人员的工作效率非常好,我很高兴最近的努力使它更适合于高性能应用程序。 下面是一个例子:C#5引入了“async”方法。从用户的角度来看,该特性非常有用,因为它有助于将几个基于任务的操作组合成一个操作。但是这种抽象是有代价的。任务是引用类型,在创建它们的任何地方都会导致堆分配,即使在“async”方法同步完成的情况下也是如此。使用C#7,异步方法可以返回类似于任务的类型,比如ValueTask,以减少堆分配的数量,或者在某些场景中完全避免它们。 为了理解所有这些是如何实现的,我们需要深入了解异步方法是如何实现的。
历史回顾
但首先,让我们回顾一下历史。 类Task和Task<T>是在.Net 4.0中引入的,在我看来,在.Net中的异步和并行编程领域发生了巨大的思想转变。与以前的异步模式(如.Net 1.0中的BeginXXX/EndXXX模式,也称为“异步编程 ...
图形学篇:Cohen-Sutherland直线段裁剪算法
前言
在二维观察中,需要在观察坐标系下根据窗口边界对世界坐标系中的二维图形进行裁剪,只将位于窗口内的图形变换到视区输出。直线裁剪是二维图形裁剪的基础,裁剪的实质是判断直线段是否与窗口边界相交,如相交则进一步确定直线段上位于窗口内的部分。
编码原理
Cohen-Sutherland直线段裁剪算法是最早流行的编码算法。每段直线段的断点都被赋予一组4位的二进制代码,称为区域编码,用来表示直线端点相对于窗口边界及其延长线的位置。 假设窗口是标准矩形,由上(y=Wyt)下(y=Wyb)左(x=Wxl)右(x=Wxt)4条边界组成。 延长窗口的4条边界形成9个区域 这样根据直线的任意端点所处的窗口区域位置,可以赋予一组4位二进制区域码RC=C3C2C1C0,依次为上下左右边界 为了保证窗口内及窗口边界上直线段端点的编码为0,我们做如下约定 C3:若y>Wyt,C3=1 C2:若y<Wyb,C2=1 C1:若y>Wxr,C1=1 C0:若y>Wxl,C0=1 也就有了如下代码
1234567891011121314151617181920212223#define L ...
LOL:诺克各个流派以及连招汇总
前言
我个人非常喜欢诺克这个英雄,原因是多方面的 1. 他会回血 2. 伤害高 3. 坦度高 4. 大招帅,还能刷新连劈
视频链接们
炸胡视频:
数据结构篇:二叉树
二叉树的创建,递归遍历及其他基础知识
二叉树的相关概念
结点的度。结点所拥有的子树的个数称为该结点的度。例如右图B结点度数为2
叶结点。度为0的结点称为叶结点,或者称为终端结点。例如右图的F,D,C结点
分枝结点。度不为0的结点称为分支结点,或者称为非终端结点。一棵树的结点除叶结点外,其余的都是分支结点。例如右图的A,B,E,左图的A,B
结点的层数。规定树的根结点的层数为1,其余结点的层数等于它的双亲结点的层数加1。例如右图的F结点层数为4
树的深度(高度)。树中所有结点的最大层数称为树的深度。例如右图深度为4
树的度。树中各结点度的最大值称为该树的度。一般情况下,二叉树的度都为2
先给出结构
12345 struct BiTree { char data; BiTree *lchild,*rchild;};
二叉树的创建
只能用先序法创建,单独的中序或后序都无法进行创建,原因和解决办法我会在以后博客进行完成
12345678910111213141516171819202122232425 BiTree * Tree :: PreC ...
数据结构篇:单链表
本程序以类似应用程序的对话框形式进行单链表的操作。希望对大家的学习有所帮助。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818 ...
数据结构篇:邻接表
每一个顶点后面就是一条链表,每个顶点都存在数组里。 以这张图为例 结构如下 运行截图 结构体定义
12345678910111213141516171819202122 //边表结点typedef struct EdgeNode { //顶点对应的下标 int adjvex; //指向下一个邻接点 struct EdgeNode *next;} edgeNode;//顶点表结点typedef struct VertexNode { //顶点数据 char data; //边表头指针 edgeNode *firstedge;} VertexNode, AdjList[100];//集合typedef struct { AdjList adjList; //顶点数和边数 int numVertexes, num ...
数据结构篇:校园最短路径导航
地图数据的配置以及图的建立[toc]
首先去找一张学校的地图,并且自己配置好数据和路线** 在代码里面写好数据
123456 //地点信息char _mapName[32][50] = {"行政楼","实验楼D", "教学楼A", "篮球场", "足球场", "A4", "实验楼C", "教学楼B", "A2", "A6", "计算机系", "苏果超市", "果曼优品", "实验楼A", "教学楼C", "图书馆", "一食堂", "D2", "D8", "C4", "中国联通" ...
图形学篇:多边形有效边表填充算法
什么是多边形?
多边形是由折线段组成的封闭图形
多边形的表示方法有哪些?[toc]
顶点表示法:使用顶点进行描述,但此时多边形仅仅是一些封闭线段,内部是空的,且不能直接进行填充上色
点阵表示法:使用大量的点进行描述,描述完成之后,得到的就是完整形态的多边形,内部已被填充,可直接针对点来进行上色
多边形的扫描转换就是从顶点表示法转换到点阵表示法的过程。
基础的填充多边形方式:
检查光栅上的每一个像素是否位于多边形内
光栅究竟是什么?
由大量等宽等间距的平行狭缝构成的光学器件称为光栅,这是专业且准确的方法,然而明显不是给人看的(观众:???)
光栅是连接帧缓冲和具体的电脑屏幕的桥梁(这是很老的大头显示器上的,现在的液晶显示器不存在光栅,它的成像依靠的是电场,液晶,滤光膜等,所以我们暂且把这里说的的光栅理解为像素)
光栅化究竟是什么?
https://blog.csdn.net/waitforfree/article/details/10066547
光栅化是一切屏幕成像的基础,没有它,就没有图像
光栅化不依赖于光栅,它依赖于CPU和GPU的交互和运算
有效 ...
C#:委托和事件
前言
委托是对函数的封装,可以当做给方法的特征指定一个名称。而事件则是委托的一种特殊形式,当发生有意义的事的时候,事件对象 处理通知过程。[toc]
委托是一种引用方法的类型。一旦为委托分配了方法,委托就与该方法具有完全相同的行为。
事件是对委托的封装,被用于表示一个委托对象,
事件是在发生其它类或对象关注的事情的时候,类或对象可通过事件通知他们。
委托用delegate声明,事件用event声明。
事件只能被外部订阅,不能在外部触发,而委托没有这个限制。
初始版本
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778using System;internal class Program{ static void Main(string[] args) { Cat cat = new Cat( ...
Google.Protobuf篇:使用protoc.exe生成自己的类
正常生成
上次我们提到了一个比较特殊的类,Addressbook,然后他开头第二行有这末个东西 要编辑这个proto后缀的文件,需要用protoc来编辑 https://github.com/protocolbuffers/protobuf/releases 不要问我为什么不下载64位的,问就是64位的我不会搞 为.exe文件设置环境变量 这样做的好处是,在任何地方都可以运行.exe文件 此电脑-属性-高级系统设置-高级-环境变量-编辑用户变变量的Path变量-添加protoc.exe的所在目录. 比如我的目录是:D:\Protoc\protoc-3.7.0-rc-2-win32\bin 迁移include文件夹下的文件 如果没有include文件夹下的文件,在使用protoc.exe时会提示缺少google\protobuf\timestamp.proto 解决办法是将include/google文件夹移动到指定了环境变量的文件夹 然后就可以在cmd中输入protoc,他应该会像配置Java环境那样有一大长串 准备工作做好了,我们来找找这个万恶之源,address.pr ...