stopwatch

C#--Distinct

Deadly 提交于 2020-08-09 10:56:55
C#黔驴技巧之去重(Distinct) 前言 关于C#中默认的Distinct方法在什么情况下才能去重,这个就不用我再多讲,针对集合对象去重默认实现将不再满足,于是乎我们需要自定义实现来解决这个问题,接下来我们详细讲解几种常见去重方案,孰好孰歹自行判之。 分组 首先给出我们需要用到的对象,如下: public class Person { public string Name { get; set; } public int Age { get; set; } } 接下来我们添加100万条数据到集合中,如下: var list = new List<Person>(); for (int i = 0; i < 1000000; i++) { list.Add(new Person() { Age = 18, Name = "jeffcky" }); } 接下来我们对年龄和名称进行分组,然后取第一条即可达到去重,如下: list = list.GroupBy(d => new { d.Age, d.Name }) .Select(d => d.FirstOrDefault()) .ToList(); 扩展方法(HashSet去重) 我们知道在C#中HashSet对于重复元素会进行过滤筛选,所以我们写下如下扩展方法,遍历集合元素,最后利用HashSet进行过滤达到去重目的,如下:

花了3天总结的RabbitMQ实用技巧

微笑、不失礼 提交于 2020-08-08 17:58:27
以前看过的关于RabbitMQ核心消息模式的文章都是基于Java API的,最近看了下官方文档,发现这些核心消息模式都可以通过Spring AMQP来实现。于是总结了下RabbitMQ的实用技巧,包括RabbitMQ在Windows和Linux下的安装、5种核心消息模式的Spring AMQP实现,相信对于想要学习和回顾RabbitMQ的朋友都会有所帮助。 简介 RabbitMQ是最受欢迎的开源消息中间件之一,在全球范围内被广泛应用。RabbitMQ是轻量级且易于部署的,能支持多种消息协议。RabbitMQ可以部署在分布式系统中,以满足大规模、高可用的要求。 相关概念 我们先来了解下RabbitMQ中的相关概念,这里以5种消息模式中的路由模式为例。 安装及配置 接下来我们介绍下RabbitMQ的安装和配置,提供Windows和Linux两种安装方式。 Windows下的安装 安装Erlang,下载地址:http://erlang.org/download/otp_win64_21.3.exe 安装RabbitMQ,下载地址:https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.14/rabbitmq-server-3.7.14.exe 安装完成后,进入RabbitMQ安装目录下的sbin目录;

【Orleans开胃菜系列2】连接Connect源码简易分析

穿精又带淫゛_ 提交于 2020-08-07 10:59:59
【Orleans开胃菜系列2】连接Connect源码简易分析 简要说明 //连接代码。 using ( var client = await StartClientWithRetries ( ) ) { } 从方法看,只是一个简单允许重试的启动客户端。追踪进去会发现关于重试逻辑的实践,Socket编程的实践,基于内存的消息队列的实践,依赖注入。再看源码的基础上,最好能配合一些理论书籍来看。理论指导实践,实践反馈理论,才是技术成长的步骤。 这篇文章只涉及Connect所引用方法的部分说明,一步一步来加深理解。 本来我是打算把orleans研究透之后再来写一篇,但看了一周之后,发下connect里面调用了很多类,每个类又有很多方法,这样下去没有尽头,到最终估计什么也写不成。 分析源码本来就是循环渐进的过程,也是一个熟悉框架/原理/实践的过程。直接跳过这个步骤,必然损失良多。所以这部分就叫开胃菜吧。在查看connect过程,会越来越接触到各种知识。 本篇暂不涉及数据持久化,主要依赖.netcore内置方法操纵内存实现。 您会接触到的扩展知识 扩展知识之Timer&TimerQueue Timer Timer 在设置的间隔后生成事件,并提供生成重复事件的选项 TimerQueue 时间队列 扩展知识之信号量 SemaphoreSlim SemaphoreSlim 实现 //信号量

这 6 种统计代码执行时间的方法,你知道几个?

旧巷老猫 提交于 2020-08-06 01:21:07
我们在日常开发中经常 需要测试一些代码的执行时间 ,但又 不想使用向 JMH (Java Microbenchmark Harness,Java 微基准测试套件)这么重的测试框架,所以本文就汇总了一些 Java 中比较常用的执行时间统计方法,总共包含以下 6 种,如下图所示: 方法一:System.currentTimeMillis 此方法为 Java 内置的方法,使用 System#currentTimeMillis 来统计执行的时间(统计单位:毫秒),示例代码如下: public class TimeIntervalTest { public static void main (String[] args) throws InterruptedException { // 开始时间 long stime = System.currentTimeMillis(); // 执行时间(1s) Thread.sleep( 1000 ); // 结束时间 long etime = System.currentTimeMillis(); // 计算执行时间 System.out.printf( "执行时长:%d 毫秒." , (etime - stime)); } } 以上程序的执行结果为: 执行时长:1000 毫秒. 方法二:System.nanoTime 此方法为 Java 内置的方法

追了多年的开发框架,你还认识指针吗?

谁说我不能喝 提交于 2020-07-29 06:00:53
一:背景 1. 讲故事 高级语言玩多了,可能很多人对指针或者汇编都淡忘了,本篇就和大家聊一聊指针,虽然C#中是不提倡使用的,但你能说指针在C#中不重要吗?你要知道FCL内库中大量的使用指针,如 String,Encoding,FileStream 等等数不胜数,如例代码: private unsafe static bool EqualsHelper(string strA, string strB) { fixed (char* ptr = &strA.m_firstChar) { fixed (char* ptr3 = &strB.m_firstChar) { char* ptr2 = ptr; char* ptr4 = ptr3; while (num >= 12) {...} while (num > 0 && *(int*)ptr2 == *(int*)ptr4) {...} } } } public unsafe Mutex(bool initiallyOwned, string name, out bool createdNew, MutexSecurity mutexSecurity) { byte* ptr = stackalloc byte[(int)checked(unchecked((ulong)(uint

C# RabbitMq 连接池封装

为君一笑 提交于 2020-07-29 05:05:38
设计思路,基于前人的杰作,略作改造。 首先我们要知道: 1.创建Connection代价是巨大的(Rabbitmq没有实现连接池机制)。 2.基于Connection创建Channel代价小的多,理论上,一个connection创建channel次数是没有限制的。 (说得再多,还是图片具体点。)流程如下图所示: 这里做了个小小改造,就是根据系统自身的需要创建自己所需要的连接。优先使用空闲连接,而不是还没达到最大的连接限制时,优先进行创建新连接。 代码改造实现如下: public class MQHelper { private const string CacheKey_MQConnectionSetting = " MQConnectionSetting " ; private const string CacheKey_MQMaxConnectionCount = " MQMaxConnectionCount " ; // 空闲连接对象队列 private readonly static ConcurrentQueue<IConnection> FreeConnectionQueue; // 使用中(忙)连接对象字典 private readonly static ConcurrentDictionary<IConnection, bool >

spring boot容器启动详解

风流意气都作罢 提交于 2020-07-28 15:53:46
一、前言 spring cloud大行其道的当下,如果不了解基本原理那么是很纠结的(看见的都是 约定大于配置 ,但是原理呢?为什么要这么做?如何串联起来的?)。spring cloud是基于spring boot快速搭建的,今天咱们就看看spring boot容器启动流程(全文基于1.5.9版本)。(本文不讲解如何快速启动spring boot,那些直接官方看即可, 官网文档飞机票 ) 二、容器启动 spring boot一般是 指定容器启动main方法,然后以命令行方式启动Jar包 ,如下图: 1 @SpringBootApplication 2 public class Application { 3 public static void main(String[] args) { 4 SpringApplication .run(Application. class , args); 5 } 6 } 这里核心关注2个东西: 1.@SpringBootApplication注解 2. SpringApplication.run()静态方法 下面我们就分别探究这两块内容。 2.1 @SpringBootApplication注解 源码如下: 1 @Target(ElementType.TYPE) 2 @Retention(RetentionPolicy.RUNTIME) 3

Apache Commons-lang3提供的StopWatch执行时间监视器,以及Spring提供的StopWatch分析

笑着哭i 提交于 2020-07-27 11:47:37
编码过程中我们经常会希望得到一段代码(一个方法)的执行时间,本文将介绍两种时间监视器(秒表)来让你优雅的、灵活的处理这个问题。 Java源生方式 这种方式最最简单,最好理解,当然也是最为常用:我们自己书写。 例如:我们如果要统计一段代码的执行时间,经常会这么来写: public static void main(String[] args) { long startTime = System.currentTimeMillis(); //获取开始时间 //函数主体代码 //... long endTime = System.currentTimeMillis(); //获取结束时间 System.out.println("程序运行时间: " + (endTime - startTime) + "ms"); } 大多数时候我们使用ms来表示即可,但是这么写缺乏灵活性。倘若我们要展示成纳秒、秒、甚至分钟,还得我们自己处理(把毫秒值拿来进行转换~ ) 当然可能到了JDK8以后,我们这么做能变得稍微灵活一些:可以这么处理: public static void main(String[] args) { Instant start = Instant.now(); //doSomething(); Instant end = Instant.now(); Duration duration

聊聊SpinalTap的BinlogEventListener

北慕城南 提交于 2020-07-26 02:09:01
序 本文主要研究一下SpinalTap的BinlogEventListener BinlogEventListener SpinalTap/spinaltap-mysql/src/main/java/com/airbnb/spinaltap/mysql/binlog_connector/BinaryLogConnectorSource.java @Slf4j public final class BinaryLogConnectorSource extends MysqlSource { //...... private final class BinlogEventListener implements BinaryLogClient.EventListener { public void onEvent(Event event) { Preconditions.checkState(isStarted(), "Source is not started and should not process events"); final EventHeaderV4 header = event.getHeader(); final BinlogFilePos filePos = new BinlogFilePos( binlogClient.getBinlogFilename(),

How to move between two views after three seconds in WPF C#?

▼魔方 西西 提交于 2020-05-28 08:25:29
问题 I am currently working on a project and I have an image which I want to show for 3 seconds, and then hide it for the rest of the run and show the main grid. What I tried to do is to put the main grid in a sub grid, with opacity 0 or Visibility = Visibility.Hidden, and implement a stopwatch in the code behind of the public MainWindow() {} Method. When I tried an if Statement: if (stopwatch.ElapsedMilliseconds > 3000) {Change Opacity}, I haven't reached the condition and stacked with the first