stopwatch

Using Stopwatch in C#

匆匆过客 提交于 2020-05-14 18:42:05
问题 Does anyone know how I can add a timer function to this code that solves sudoku puzzles? I've tried the Stopwatch class but I can't get it to work because I don't know exactly where to put it. I've tried several places but always get errors. The main purpose of the code works but I'd like to add a timer function to see how long the code ran for. using System; namespace SuDoKu { public class SuDoKu { private int[,] grid; public SuDoKu() { grid = new int[9, 9]; } static void Main(string[] args)

SpringBoot 源码解析 (六)----- Spring Boot的核心能力

倾然丶 夕夏残阳落幕 提交于 2020-05-02 15:20:58
Spring Boot默认使用Tomcat作为嵌入式的Servlet容器,只要引入了spring-boot-start-web依赖,则默认是用Tomcat作为Servlet容器: < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-web </ artifactId > </ dependency > Servlet容器的使用 默认servlet容器 我们看看spring-boot-starter-web这个starter中有什么 核心就是引入了tomcat和SpringMvc,我们先来看tomcat Spring Boot默认支持Tomcat,Jetty,和Undertow作为底层容器。如图: 而Spring Boot默认使用Tomcat,一旦引入spring-boot-starter-web模块,就默认使用Tomcat容器。 切换servlet容器 那如果我么想切换其他Servlet容器呢,只需如下两步: 将tomcat依赖移除掉 引入其他Servlet容器依赖 引入jetty: < dependency > < groupId > org.springframework.boot </ groupId > < artifactId

SpringBoot入门(三)——入口类解析

筅森魡賤 提交于 2020-05-02 12:02:08
本文来自 网易云社区 上一篇介绍了起步依赖,这篇我们先来看下SpringBoot项目是如何启动的。 入口类 再次观察工程的Maven配置文件,可以看到工程的默认打包方式是jar格式的。 <packaging>jar</packaging> SpringBoot默认的打包方式为jar,并且内嵌web容器。因此我们可以用运行jar包的方式启动一个web程序: java -jar xxx.jar linux服务器上可以用下面命令让服务常驻: nohup java -jar xxx.jar & 我们知道jar包方式运行需要main方法,SpringBoot已为我们自动生成,这个类便是项目启动入口。 我的项目名是blog-demo,对应生成的main方法在BlogDemoApplication.java,其代码如下: @SpringBootApplicationpublic class BlogDemoApplication { public static void main(String[] args) { SpringApplication.run(BlogDemoApplication.class, args); } } main方法中执行SpringApplication的静态方法run,并将当前类和启动参数传入。 静态方法中实例化一个SpringApplication

C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能

末鹿安然 提交于 2020-05-01 04:57:15
本文通过ANTS Memory Profiler工具探索c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能。 本文涉及程序为.NET Core 2.0控制台应用程序。 一、常量字符串拼接 private static void TestPerformance(Action action, int times) { Stopwatch sw = new Stopwatch(); sw.Start(); for(int i = 0; i < times; i++) { action(); } sw.Stop(); Console.WriteLine(action.Method.Name + ", FullTime: " + sw.ElapsedMilliseconds); } 1.+方法 1.1连续拼接 private static void AddTest() { string s = string.Empty; s = "1" + "2" + "3" + "4" + "5" + "6" + "7" + "8"; } 运行时间: 内存情况: IL代码: .method private hidebysig static void AddTest() cil managed { // Code size

C# String 字符拼接测试(“+”、string.Format、StringBuilder 比较)

僤鯓⒐⒋嵵緔 提交于 2020-05-01 04:18:04
对于字符串的拼接自己一直有疑问,在何时该用什么方法来拼接?哪种方法更好、更适合。 几种方法 1、“+” 拼接字符串 现在在 C# 中,字符串进行拼接,可以直接用 “+” 而且可以直接用于数字类型的而不必转换(整形、浮点等都可以) string a = " 1 " ; a = a + " 1 " ; string b = " 2 " + 1.2345 ; 对于使用多个 “+” 的,编译器会优化为: string a = " a " + 1 + " b " + 2 + " c " + 3 + " d " + 4 ; string a = string .Concat( new string []{}); 通过分析string.Concat(params string[] values)的实现可以知道:先计算目标字符串的长度,然后申请相应的空间,最后逐一复制,时间复杂度为o(n),常数为1。 固定数量的字符串连接效率最高的是+。 但是字符串的连+不要拆成多条语句,比如: string a = " a " ; a += 1 ; a += " b " ; a += 2 ; a += " c " ; a += 3 ; 这样的代码,不会被优化为string.Concat,就变成了性能杀手,因为第i个字符串需要复制n-i次,时间复杂度就成了o(n^2)。 那么用 “+” 拼接字符串也是要正确运用。

spring-boot之条件注解底层探秘

泪湿孤枕 提交于 2020-05-01 02:11:53
在 上一篇 中我们聊到条件注解的实现。在最后有一个问题,“使用了条件注解的类为什么在条件不成立的时候,spring不会注入bean呢”。伴随着这个问题,今天我们来看下spring-boot的启动流程,在该流程中为啥我们的bean会伴随着条件注解的成立与否而被注入。 我们来看下spring-boot的启动关键步骤 1.程序的启动点 //1.入口 SpringApplication.run(SampleTomcatJspApplication.class, args); //2.跟着入口一直看下去,我们就到了这个地方 public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) { return new SpringApplication(primarySources).run(args); } 到这里的话,我们就看到了一个实际上是创建一个SpringApplication对象然后执行run方法。我们先看一下创建对应的时候都是做了什么事情 2. SpringApplication的构造过程 public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { /

是什么优化让 .NET Core 性能飙升?

自闭症网瘾萝莉.ら 提交于 2020-04-29 10:17:28
本文参考文章:https://blogs.msdn.microsoft.com/dotnet/2017/06/07/performance-improvements-in-net-core/ 转载请注明出自: 葡萄城官网 ,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 .NET Core(开放源代码,跨平台,x-copy可部署等)有许多令人兴奋的方面,其中最值得称赞的就是其性能了。 感谢所有社区开发人员对.NET Core做出的贡献,其中的许多改进也将在接下来的几个版本中引入.NET Framework。 本文主要介绍.NET Core中的一些性能改进,特别是.NET Core 2.0中的,重点介绍各个核心库的一些示例。 集合 集合是任何应用程序的基石,同时.NET库中也有大量集合。.NET库中的一些改进是为了消除开销,例如简化操作以便更好的实现内联,减少指令数量等。例如,下面的这个使用Q<T>的例子: using System; using System.Diagnostics; using System.Collections.Generic; public class Test { public static void Main() { while ( true ) { var q = new Queue< int > (); var sw =

C#线程学习笔记八:async & await入门一

邮差的信 提交于 2020-04-29 08:19:33
一、涉及内容 async & await是C# 5.0引入的,控制台输出所使用的$符号(拼接字符串)是C# 6.0引入的,其功能类似于string.Format()方法。 二、多线程、异步、同步之间的联系与区别 厨房案例: 比如说你要炒5道菜ABCDE,但是只有两个炉子可以用,即同时只能炒两道菜。在这里,炉子就是线程。 假如两个炉子分别同时炒A和B,那剩下的CDE只能等A或B炒完了才能开始。这个等待的过程就是 同步 ,我们称之为 阻塞 ,即这个时候你只能炒A和B这两道菜。 假如你还有一台咖啡机,在你炒A和B的时候顺手把咖啡豆和水放到咖啡机里打开开关,然后你就不用管它了。此时,就是新开了一个线程去煮咖啡,而煮咖啡 是由咖啡机自动完成的并不影响继续炒菜,所以煮咖啡这个线程是 异步 的,我们称之为 非阻塞 。 当咖啡机叮的一声通知你咖啡已经煮好了,你要去把咖啡拿出来加点糖或奶什么的,这个拿咖啡的动作我们称之为 回调 ,这个是咖啡机线程完成之后通知你要去 做的动作。 简单来说: 会占用你的时间让你无法去做其它事情的任务叫做同步任务(炒菜要专注否则会糊锅)。 那些不需要占用你的时间的任务叫做异步任务(咖啡机自己会把咖啡煮好,不需要你一直看着它)。 下面代码演示不使用异步的情况: class Program { // 创建计时器 private static readonly

SpringBoot学习(二)探究Springboot启动机制

試著忘記壹切 提交于 2020-04-28 03:15:13
引言:     SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏。所以这次博主就跟你们一起探究一下SpringBoot的启动原理。 目录      启动流程图      启动类      启动分析      启动总结 启动流程图 总览: 上图为 SpringBoot启动结构图 ,我们发现启动流程主要分为三个部分,第一部分进行SpringApplication的初始化模块,配置一些基本的环境变量、资源、构造器、监听器,第二部分实现了应用具体的启动方案,包括启动流程的监听模块、加载配置环境模块、及核心的创建上下文环境模块,第三部分是自动化配置模块,该模块作为springboot自动配置核心,在后面的分析中会详细讨论。在下面的启动程序中我们会串联起结构中的主要功能。(摘自: SpringBoot启动流程解析 ) SpringBoot启动类     从上面代码可以看出,别看它只是定义了 @SpringBootApplication 这个Annotation 和 调用SpringApplication.run方法,但是它们实现的功能可不是一星半点的。 SpringApplication启动分析      注:我这里是2.0.3版本的可能有些地方不太一样     参考链接: 深入理解SpringBoot之启动探究

SpringBoot源码分析之SpringBoot的启动过程

柔情痞子 提交于 2020-04-28 03:14:29
先看示例 SpringBoot的启动很简单,在许多情况下,你可以委托给静态 SpringApplication.run 方法,代码如下: @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication. class , args); } } 从代码上可以看出,调用了SpringApplication的静态方法run。这个run方法会构造一个SpringApplication的实例,然后再调用这里实例的run方法就表示启动SpringBoot。 当你的应用程序启动时,你应该看到类似于以下输出的内容: . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.10.RELEASE)