.Net Framework

java中的AIO

不羁岁月 提交于 2021-02-02 00:40:04
AIO(异步非阻塞)AIO采用了Proactor模式,AIO与NIO的不同之处在于当AIO在进行读写操作时,不用先等通知,可直接调用相应的read/write方法,这两种方法均为异步的,对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序,而NIO的通知是发生在动作之前的,是在可读、写的时候,Selector发现了这些事件后调用Handler处理. 在AIO socket编程中,服务端通道是AsynchronousServerSocketChannel,这个类提供了一个open()静态工厂,一个bind()方法用于绑定服务端IP地址(还有端口号),另外还提供了accept()用于接收用户连接请求。在客户端使用的通道是AsynchronousSocketChannel,这个通道处理提供open静态工厂方法外,还提供了read和write方法。 在AIO编程中,发出一个事件(accept read write等)之后要指定事件处理类(回调函数),AIO中的事件处理类是CompletionHandler<V,A>,这个接口定义了如下两个方法,分别在异步操作成功和失败时被回调。 void completed(V result, A attachment);

《Effective C#》笔记(4)

我与影子孤独终老i 提交于 2021-02-02 00:38:24
优先考虑提供迭代器方法,而不要返回集合 在创建这种返回一系列对象的方法时,应该考虑将其写成迭代器方法,使得调用者能够更为灵活地处理这些对象。 迭代器方法是一种采用yield return语法来编写的方法,采用按需生成(generate-as-needed)的策略,它会等到调用方请求获取某个元素的时候再去生成序列中的这个元素。 类似下面这个简单的迭代器方法,用来生成从0到9的int序列: public static IEnumerable<int> GetIntList() { var start = 0; while (start<10) { yield return start; start++; } } 对于这样的写法,编译器会用特殊的办法处理它们。然后在调用端使用方法的返回结果时,只有真正使用这个元素时才会生成,这对于较大的序列来说,优势是很明显的。 那么有没有哪种场合是不适宜用迭代器方法来生成序列的?比方说,如果该序列要反复使用,或是需要缓存起来,那么还要不要编写迭代器方法了? 整体来说,对于集合的使用,可能有两种情况: 只需在真正用到的时候去获取 为了让程序运行得更为高效,调用方需要一次获取全部元素 为了兼顾这两种场景,.net类库的处理方法,为IEnumerable<T>提供了ToList()与ToArray(),这两个方法就会根据所表示的序列自行获取其中的元素

压力测试命令行工具SuperBenchmarker

不羁的心 提交于 2021-02-02 00:35:54
压力测试命令行工具SuperBenchmarker SuperBenchmarker 是ㄧ个开源的类似于Apache ab的压力测试命令行工具。可以在 .NET 4.52+ 或者 .NET Core 2.0+ 平台上运行。 可支持Get、Post、Put、Delete这些调用方式,调用时能指定Concurrent user、Request数、Header template…等。 可以从Github、Chocolatey这两种方式获得。 Github用户可在download目录内取得编译好的程序主文件 Chocolatey使用者可输入下列命令进行下载 cinst SuperBenchmarker 程序的作者是建议用Chocolatey去获得程序主文件,因为放置的程序主文件已经被作者用ILMerge将依赖的组件合并,获得后就可直接使用。 程序的使用方式可直接在命令行下输入sb查看,里面会有程序的使用方式、参数、及简易的使用范例 其中比较重要的参数大概有下列几个 -u 可用来指定要压测的网站或是API -n 可用来指定要压的Request数量 -c 可用来指定Concurrent Request数量 -m 可用来指定要使用的HTTP Method -h 可用来指定要显示HTTP Header -q 可用来指定要显示Cookie 所以我们要发送1000个Request去测试腾讯网的话

开源OA办公平台搭建教程:基于nginx的快速集群部署-上下文分发

回眸只為那壹抹淺笑 提交于 2021-02-01 18:13:24
此配置适合o2集群部署或者外网访问o2server服务(如移动端h5方式访问o2) 此配置需要o2server V5.2及以上版本 主机信息 主机1:172.16.98.8(linux) 主机2: 172.16.98.9 (linux) 集群需求 172.16.98.8 : WEB服务器, 应用服务器,文件存储服务器,中心服务器 172.16.98.9 : WEB服务器, 应用服务器,文件存储服务器 ,中心服务器 数据库 mysql数据库 nginx访问域名及端口 域名:qmx.o2oa.net(可以用ip,如果域名没有解析需要配置hosts) 端口:80(o2web服务器、 o2 应用服务器、 o2 中心服务器 ) 分发规则(下面的上下文(如:/dev/web)不是固定的,可以根据自身需要需改): nginx80端口匹配的上下文 o2端口服务 /dev/web/ 8080(o2web服务器) /dev/ app / 20020( o2应用 服务器) /dev/ center / 20030(o2中心 服务器) 配置步骤 一、配置节点标识 1、在主机 172.16.98.8 的o2server/local目录中修改或者新增文件node.cfg,修改内容为主机的域名或者IP; 主机 172.16.98.8 的节点标识文件配置 172.16.98.8 2、在主机 172.16.98.9

高性能图表控件LightningChart有关轴标签、轴的精度问题解答

纵然是瞬间 提交于 2021-02-01 17:26:02
LightningChart.NET 完全由GPU加速,并且性能经过优化,可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D,高级3D,Polar,Smith,3D饼/甜甜圈,地理地图和GIS图表以及适用于科学,工程,医学,航空,贸易,能源和其他领域的体绘制功能。 LightningChart.NET现已加入在线订购,SignalTools , 12 months, WPF版本原价4105元,现价只需3499元,现在抢购立享优惠!立即购买>> 点击下载LightningChart.NET最新试用版 如何自定义轴标签 如图所示添加轴标签。为什么最后一个坐标标签的可见属性设置为True,为什么它被隐藏。 有没有一种方法可以确保始终显示标签数组的第一个和最后一个标签。 有什么办法可以判断相邻坐标是否重叠 回复: 可以测量标签的大小并将其与可用空间进行比较。所需文本空间的大小可以使用_chart.MeasureText(Text,Font)进行测量。[请注意,Chart.MeasureText(Text,Font)以DIP单位输出;在需要的地方使用DpiHelper.DipToPx()。PX中的最大轴和最小轴之间的间距可以通过以下方法测量(axisX.ValueToCoord(axisX.Maximum,false)-axisX

SuperBenchmarker一个用.NET编写的压测工具

北慕城南 提交于 2021-02-01 15:54:04
0x01 前言 在这之前想必大家对ab(http)与abs(https)也有一些了解,我们今天不去看ab和abs, SuperBenchmarker (sb.exe)是一个压测工具,他是一个受Apache Benchmark的启发,他会在终端窗口为我们显示最终的结果,同时也会在web界面生成一个动态结果。 SuperBenchmarker (sb.exe)可以在Windows或者Mac上运行(尚未在Linux上进行测试),他可以安装在.NET4.52+或者.NET Core2.0+。 0x02 安装 我们可以直接拉取源代码进行构建 git clone https://github.com/aliostad/SuperBenchmarker cd SuperBenchmarker ./build.sh 0x03 参数 -c --concurrency (Default: 1) 并发请求数 -n, --numberOfRequests (Default: 100) 请求数量 -m, --method (Default: GET) HTTP Method -u, --url 请求地址,也就是需要压测的地址 -v,--verbose:输出详细 -h, --headers:输出HTTP Header -k, --cookies:输出cookie -q, --onlyRequest

报表生成器FastReport .Net如何使用Windows.Forms

被刻印的时光 ゝ 提交于 2021-02-01 13:48:58
FastReport .Net 是适用于Windows Forms,ASP.NET,MVC和.NET Core的全功能 报表 解决方案。它可以在Microsoft Visual Studio 2005-2019中使用。支持.Net Framework 2.0-4.x,.NET Core 3.0及以上版本。 在FastReport .NET 2021.1的新版本中,我们实现了对.NET 5的支持。添加了新条形码-Deutsce Post Leitcode。将RTF转换为报告对象的算法已得到显着改进。并且还添加了用于转换数字的新功能。欢迎下载体验。(点击下方按钮下载) 立即点击下载FastReport.NET v2021.1最新版 Fastreport.NET在线购买价更低 ,专享85折起!赶紧 加入购物清单 吧! 使用Visual Studi 中的报表组件 让我们考虑一下Visual Studio中报表组件的典型用法。我们将使用类型化数据集中的数据。 创建一个新的Windows窗体应用程序; 添加数据集到它("Data| add New Data Source…"菜单项); 切换到窗体设计器; 在窗体上添加“DataSet”组件,并将其连接到您创建的类型化数据集。 创建报表的步骤如下: 将“Report”组件放在表单上: 右键点击(或点击智能标签按钮),选择“Design

腾讯工程师经验:如何写一手好代码?

余生长醉 提交于 2021-01-31 08:52:54
导读:如何写一手好代码,本文值得大伙一读哦。 前言 作为公司代码委员会 golang 分会的理事,我 Review 了很多代码,看了很多别人的 review 评论。发现不少同学 code review 与写出好代码的水平有待提高。在这里,想分享一下我的一些理念和思路。 为什么技术人员包括 leader 都要做 Code Review 谚语曰: 'Talk Is Cheap, Show Me The Code'。 知易行难,知行合一难。嘴里要讲出来总是轻松,把别人讲过的话记住,组织一下语言,再讲出来,很容易。绝知此事要躬行。设计理念你可能道听途说了一些,以为自己掌握了,但是你会做么?有能力去思考、改进自己当前的实践方式和实践中的代码细节么?不客气地说,很多人仅仅是知道并且认同了某个设计理念,进而产生了一种虚假的安心感---自己的技术并不差。但是,他根本没有去实践这些设计理念,甚至根本实践不了这些设计理念,从结果来说,他懂不懂这些道理/理念,有什么差别?变成了自欺欺人。 代码,是设计理念落地的地方,是技术的呈现和根本。同学们可以在 review 过程中做到落地沟通,不再是空对空的讨论,可以在实际问题中产生思考的碰撞,互相学习,大家都掌握团队里积累出来最好的实践方式!当然,如果 leader 没时间写代码,仅仅是 review 代码,指出其他同学某些实践方式不好,要给出好的实践的意见

DDD到底什么鬼?

戏子无情 提交于 2021-01-31 08:38:17
4月,InfoQ 发布了软件架构与设计的趋势报告。在报告中可以看出,微服务、领域驱动设计等已经非常流行,并成为目前软件开发行业的主流趋势。 大家都知道,微服务划分的一个重要理论基础就是领域驱动设计。但由于 DDD 门槛高、概念多,体系庞大又抽象,再加上缺少实践经验和案例指导,很多开发人员对 DDD 存在不少疑惑: 理论文章多,涉及太多知识点,无从下手! 这么牛逼的技术,不能落地有什么用? 为何需要领域专家参与到项目开发中来? DDD 与微服务的关系? DDD 落地案例市面上少见,真的靠谱吗? 领导都不懂 DDD,怎么推! …… 许多朋友对其价值收益感受不明显,主要这两点原因: 一是落地困难,对开发人员的能力要求比较高,二是不清楚到底用在哪里,为什么要用、怎么用。 其实,DDD是一套完整而系统的设计方法,并非一种架构。它能带给你从战略设计到战术设计的标准设计过程,使得你的设计思路能够更加清晰,设计过程更加规范,有助于提高技术人的架构设计能力。无论是在新项目中设计微服务,还是将系统从单体架构演进到微服务,DDD 都大有助力。 为什么要使用领域驱动设计? 从Eric Evans的《 领域驱动设计:软件核心复杂性应对之道 》一书的书名就可以看出这一方法论是为了解决软件核心复杂性的。也就是说软件业务越来越复杂了,领域驱动设计可以让事情变得简单。而实际情况是: 领域驱动设计的门槛很高

《Effective C#》笔记(2)

谁都会走 提交于 2021-01-30 23:35:02
理解并善用.NET的资源管理机制 .NET环境会提供垃圾回收器(GC)来帮助控制托管内存,这使得开发者无须担心内存泄漏等内存管理问题。尽管如此,但如果开发者能够把自己应该执行的那些清理工作做好,那么垃圾回收器会表现得更为出色。非托管的资源是需要由开发者控制的,例如数据库连接、GDI+对象、IO等;此外,某些做法可能会令对象在内存中所待的时间比你预想的更长,这些都是需要我们去了解、避免的。 GC的检测过程是从应用程序的根对象出发,把与该对象之间没有通路相连的那些对象判定为不可达的对象,也就是说,凡是无法从应用程序中的活动对象(live object)出发而到达的那些对象都应该得到回收。应用程序如果不再使用某个实体,那么就不会继续引用它,于是,GC就会发现这个实体是可以回收的。 垃圾回收器每次运行的时候,都会压缩托管堆,以便把其中的活动对象安排在一起,使得空闲的内存能够形成一块连续的区域。 针对托管堆的内存管理工作完全是由垃圾回收器负责的,但是除此之外的其他资源则必须由开发者来管理。 有两种机制可以控制非托管资源的生存期 一种是finalizer/destructure(析构函数) 另一种是IDisposable接口。 在这两种方式中,应该优先考虑通过IDisposable接口来更为顺畅地将资源及时返还给系统,因为finalizer作为一种防护机制