stopwatch

Net Core 2.1 日志记录框架NLog+Mysql配置

♀尐吖头ヾ 提交于 2020-04-24 22:54:43
NLog是什么? 这里还是简单介绍一下吧,为了让小白也知道。NLog是一个灵活的免费日志记录平台,适用于各种.NET平台,包括.NET Core。NLog可以通过简单地配置就可以可以很方便的写入多个日志仓库中(数据库,文件,控制台)。 NLog在Net Core中怎么用啊? 用之前你得新建一个asp.net core项目吧。这里以net core api为例吧。如下图所示是博主刚刚创建的net core api项目。 建好项目之后干什么呢、当然得添加引用了。你可以随心所欲的使用Nuget或者命令进行安装 Install-Package NLog -Version 4.6.5 Install -Package NLog.Web.AspNetCore -Version 4.8.4 Install-Package MySql.Data -Version 8.0.16 上面说了,NLog只需要简单地修改配置就可以使用,那接下来就是新建一个NLog配置文件了。你可以通过Nuget或者程序包控制台进行安装,也可以自己新建一个NLog.config文件。这里还是通过程序包控制台进行安装吧 安装后看到项目目录多了一个NLog.config文件。这里需要注意,右键设置一下这个NLog.config的属性为“始终复制” 打开nlog.config文件,看看里面的结构,发现有两个重要节点,一个是声明目标

等差数列,for循环,递归和尾递归的对比

こ雲淡風輕ζ 提交于 2020-04-23 23:19:27
生活中,如果1+2+3+4.....+100,大家基本上都会用等差数列计算,如果有人从1开始加,不是傻就是白X,那么程序中呢,是不是也是这样。今天无意中看到了尾递归,以前也写过,但是不知道这个专业名词,今天写一下对比下性能问题。 今天主要是看到了尾递归,所以联想到了这些,写下这篇文章,其中也把Benchmark (Nuget上的BenchmarkDotNet)的基准测试用了下,感觉比较好用,赞。Benchmark 需要在release下运行。 原则上所有的递归操作,都可以写成循环操作。尾递归是指,在函数返回的时候,调用自身本身,并且return语句不能包含表达式。这样编译器或者解释器就可以把尾递归做优化,试运行速度更快。 测试类 public class TestClass { /// <summary> /// for循环 /// </summary> /// <param name="n"></param> /// <param name="counter"></param> /// <returns></returns> public int TestFor( int n) { int s = 1 ; for ( int i = 2 ; i < n + 1 ; i++ ) { s = s + i; } return s; } /// <summary> /// 等差数列 //

OpenXML性能真的低下吗?

馋奶兔 提交于 2020-04-22 02:17:54
博文 NET导出Excel的四种方法及评测 中对比了4个库的导出性能,但对OpenXML的评价并不高,本人觉得不合理,所以我重新测试下性能 基于OpenXML的包装类 ExcelDownWorker 1 public class ExcelDownWorker 2 { 3 void NewRow(); // 新行 4 5 void Write( object value); // 写入列,从A列开始写 6 7 void Start(Stream stream); // 创建开始 8 9 void End(); // 创建结束 10 } 执行数据写入,数据是前面测试数据 6W行 10列 static void Excel(List<Temp> lt) { Console.WriteLine(GC.GetTotalMemory( true )); var st = new Stopwatch();st.Start(); var ew = new ExcelDownWorker(); using ( var fs = new FileStream(Directory.GetCurrentDirectory() + " \\data.xlsx " , FileMode.Create, FileAccess.ReadWrite)) { ew.Start(fs); var ps =

C#里面低消耗获取当前时间的思路

痴心易碎 提交于 2020-04-22 00:56:09
Linux下有vsyscall来优化一些例如time(NULL), gettimeofday这种调用的消耗; 但是Windows下, 没有类似的东西, 但是思路还是有的 1. 程序启动的时候, 获取一下准确的时间戳 2. 然后每次需要获取时间的时候, 获取一下流逝的时间, 可以通过获取CPU的ticks数, 或者进程启动的毫秒数来获取 前者通过Stopwatch.GetTimestamp()来获取, 后者通过Environment.TickCount和Environment.TickCount64来获取. 其中Environment.TickCount64只支持.net core 3.0以上的版本. 来源: oschina 链接: https://my.oschina.net/u/4304462/blog/3288599

C#里面低消耗获取当前时间的思路

╄→гoц情女王★ 提交于 2020-04-21 12:43:30
Linux下有vsyscall来优化一些例如time(NULL), gettimeofday这种调用的消耗; 但是Windows下, 没有类似的东西, 但是思路还是有的 1. 程序启动的时候, 获取一下准确的时间戳 2. 然后每次需要获取时间的时候, 获取一下流逝的时间, 可以通过获取CPU的ticks数, 或者进程启动的毫秒数来获取 前者通过Stopwatch.GetTimestamp()来获取, 后者通过Environment.TickCount和Environment.TickCount64来获取. 其中Environment.TickCount64只支持.net core 3.0以上的版本. 来源: oschina 链接: https://my.oschina.net/u/4346652/blog/3288646

如何在Java中编写正确的微基准测试?

只愿长相守 提交于 2020-04-21 04:54:00
问题: How do you write (and run) a correct micro-benchmark in Java? 您如何用Java编写(并运行)正确的微基准测试? I'm looking for some code samples and comments illustrating various things to think about. 我正在寻找一些代码示例和注释,以说明要考虑的各种问题。 Example: Should the benchmark measure time/iteration or iterations/time, and why? 示例:基准测试应测量时间/迭代或迭代/时间,为什么? Related: Is stopwatch benchmarking acceptable? 相关: 秒表基准测试是否可以接受? 解决方案: 参考一: https://stackoom.com/question/278h/如何在Java中编写正确的微基准测试 参考二: https://oldbug.net/q/278h/How-do-I-write-a-correct-micro-benchmark-in-Java 来源: oschina 链接: https://my.oschina.net/u/4438370/blog/3284140

SpringBoot事件监听机制源码分析(上) SpringBoot源码(九)

冷暖自知 提交于 2020-04-20 04:38:22
SpringBoot中文注释项目Github地址: https://github.com/yuanmabiji/spring-boot-2.1.0.RELEASE 本篇接 SpringApplication对象是如何构建的? SpringBoot源码(八) 1 温故而知新 温故而知新,我们来简单回顾一下上篇的内容,上一篇我们分析了 SpringApplication对象的构建过程及SpringBoot自己实现的一套SPI机制 ,现将关键步骤再浓缩总结下: SpringApplication 对象的构造过程其实就是给 SpringApplication 类的 6 个成员变量赋值; SpringBoot通过以下步骤实现自己的SPI机制: 1)首先获取线程上下文类加载器; 2)然后利用上下文类加载器从 spring.factories 配置文件中 加载所有的SPI扩展实现类并放入缓存中 ; 3)根据SPI接口从缓存中取出相应的SPI扩展实现类; 4)实例化从缓存中取出的SPI扩展实现类并返回。 2 引言 在SpringBoot启动过程中,每个不同的启动阶段会分别广播不同的内置生命周期事件,然后相应的监听器会监听这些事件来执行一些初始化逻辑工作比如 ConfigFileApplicationListener 会监听 onApplicationEnvironmentPreparedEvent

【Java系列008】和你一起揭开LinkedList的“庐山真面目”

拈花ヽ惹草 提交于 2020-04-18 19:55:03
你好!我是miniluo,又到了周末,我将和你一起推翻认知里的LinkedList,它并非如教科书所言那么的高效。 JDK集合类List,我们最常用的莫过于ArrayList。而面试官也是最常考察应聘者对ArrayList和LinkedList的理解,其实考察的是应聘者对数据结构的掌握程度。 我们知道两者代表两种不同数据结构,分别是数组和(双向)链表。数据结构通常都是用大O时间复杂度来比对,通过下图(图片来源: https://www.bigocheatsheet.com/ ),我们可以看到数组和链表两者之间大O的显著差异: 总结就两点: 1、 对于数组,随机元素访问的时间复杂度是 O(1),元素插入操作是 O(n) 。 2、 对于链表,按偏移量访问的时间复杂度是 O(n),元素插入操作是 O(1) 。 而我们从教科书中可以知道,链表插入速度快,适用于频繁插入,较少随机读取的场景中。那LinkedList真的如教科书所言?如我们所想吗?“实践是检验真理的唯一标准”,没有实践就下断言的结论是耍流氓,不具备科学性;秉着这个思想,我们撸一波代码验证一番。 元素访问时间复杂度 我们首先来看两者的随机访问时间复杂度,看看下文代码: 1 /** 2 * ArrayList访问 3 * @param elementCount 元素个数 4 * @param loopCount 循环次数 5 */

Spring计时器StopWatch使用

你。 提交于 2020-04-18 19:10:07
StopWatch是位于org.springframework.util包下的一个工具类,通过它可方便的对程序部分代码进行计时(ms级别),适用于同步单线程代码块。  正常情况下,我们如果需要看某段代码的执行耗时,会通过如下的方式进行查看: public static void main(String[] args) throws InterruptedException { StopWatchTest.test0(); // StopWatchTest.test1(); } public static void test0() throws InterruptedException { long start = System.currentTimeMillis(); // do something Thread.sleep(100); long end = System.currentTimeMillis(); long start2 = System.currentTimeMillis(); // do something Thread.sleep(200); long end2 = System.currentTimeMillis(); System.out.println("某某1执行耗时:" + (end - start)); System.out.println(

C#泛型详解

偶尔善良 提交于 2020-04-11 17:19:09
这篇文章主要讲解C#中的泛型,泛型在C#中有很重要的地位,尤其是在搭建项目框架的时候。 一、什么是泛型 泛型是C#2.0推出的新语法,不是语法糖,而是2.0由框架升级提供的功能。 我们在编程程序时,经常会遇到功能非常相似的模块,只是它们处理的数据不一样。但我们没有办法,只能分别写多个方法来处理不同的数据类型。这个时候,那么问题来了,有没有一种办法,用同一个方法来处理传入不同种类型参数的办法呢?泛型的出现就是专门来解决这个问题的。 二、为什么使用泛型 先来看下面一个例子: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyGeneric { public class CommonMethod { /// <summary> /// 打印个int值 /// /// 因为方法声明的时候,写死了参数类型 /// 已婚的男人 Eleven San /// </summary> /// <param name="iParameter"></param> public static void ShowInt( int iParameter) { Console.WriteLine( "