stopwatch

Unity AssetBundle 分割与合并

荒凉一梦 提交于 2021-02-14 22:48:26
介绍 Unity AssetBundle 中的资源非常容易被提取,如果想要阻止简单的提取行为,可以尝试在打包时将文件分割,在运行时将文件合并。 打包 打包时将文件分割成多个文件,这个可以根据需要指定规则处理。例如可以使用随机文件名、分割成随机的份数。 加载 LoadFromStream Unity 2017.4 Unity 2018.4 Unity 2019.3 Unity 2020.1 或更高版本新增了一个从流读取 AssetBundle 的 API,那么可以将多个文件合并为一个文件流供 API 使用。 Unity - Scripting API: AssetBundle.LoadFromStream 虽然通过这个 API 可以自定义 AssetBundle 加载方式,包括加密、多文件读取、内存中读取等等。但是有一个致命缺点:使用时占用文件打开数量,而操作系统对文件打开数量是有上限的。 5.5.4. iOS file handle overuse Current versions of Unity are not affected by this issue. In versions prior to Unity 5.3.2p2, Unity would hold an open file handle to an AssetBundle the entire time that

.net core webapi通过中间件获取请求和响应内容

二次信任 提交于 2021-02-05 05:45:29
本文主要根据中间件来实现对.net core webapi中产生的请求和响应数据进行获取并存入日志文件中; 这里不详细介绍日志文件的使用。你可以自己接入NLog,log4net,Exceptionless等 创建接口记录的中间件 using Microliu.Core.Loggers; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Internal; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ptibro.Partner.API.Extensions { public class RequestResponseLoggingMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger;

Creating a stopwatch from scratch in JavaScript

£可爱£侵袭症+ 提交于 2021-01-29 03:14:45
问题 By creating variables for milliseconds, seconds, and minutes, I wanted to make a little stopwatch project. The onClick for the button I have is for theTimer() : var milli = 0; var seconds = 0; var minutes = 0; var onOff = 0; var txtMilli = document.getElementById("txtMilli"); var txtSeconds = document.getElementById("txtSeconds"); var txtMinutes = document.getElementById("txtMinutes"); function theTimer() { if (onOff == 0) { onOff = 1; timer = setInterval("startCounting()",1); } if (onOff ==

guava限流使用场景与源码分析

ⅰ亾dé卋堺 提交于 2021-01-23 00:25:51
我们首先讲一个场景,假如一个接口只能支持每秒5次访问速率,假如要实现这个功能要如何实现?通用的方法我们知道有计数器,漏斗,令牌桶等方法,本文主要介绍Guava如何是如何实现限流的 Guava是使用令牌桶算法来实现限流功能的,但也有自己的一些特点: 在每次有请求来获取token的时候,会同时添加令牌到令牌桶中,并不是通过异步任务固定速率添加令牌到令牌桶中,是一个惰性的方法。 超额信用消费,即用将来时间产生的令牌,来满足当前的请求,这样能应对一定的瞬间流量 可以带着这两个特点来继续阅读下文,首先看下Guava是如何使用的,简单代码如下(创建每秒5次的限流器): RateLimiter limiter = RateLimiter.create(5.0); //创建每秒一次的限流器 double timeWaited = limiter.acquire(); //获取令牌,返回值为获取令牌等待的时间 System.out.println("time waited: " + timeWaited); 上面的代码使用时很简单的,下面来剖析下代码实现,Guava 中的限流器有两种实现, SmoothBursty,顾名思义,该实现主要通过令牌桶方法实现,能够应对突发流量 SmoothWarmingUp,实现也是通过令牌桶方法,但在应对突发流量与流量整形中取了折中,能应对一定的突发流量

高并发优雅的做限流

那年仲夏 提交于 2021-01-19 23:41:24
技术分析 如果你比较关注现在的技术形式,就会知道微服务现在火的一塌糊涂,当然,事物都有两面性,微服务也不是解决技术,架构等问题的万能钥匙。如果服务化带来的利大于弊,菜菜还是推荐将系统服务化。随着服务化的进程的不断演化,各种概念以及技术随之而来。任何一种方案都是为了解决问题而存在。比如:熔断设计,接口幂等性设计,重试机制设计,还有今天菜菜要说的限流设计,等等这些技术几乎都充斥在每个系统中。 就今天来说的限流,书面意思和作用一致,就是为了限制,通过对并发访问或者请求进行限速或者一个时间窗口内的请求进行限速来保护系统。一旦达到了限制的临界点,可以用拒绝服务、排队、或者等待的方式来保护现有系统,不至于发生雪崩现象。 限流就像做帝都的地铁一般,如果你住在西二旗或者天通苑也许会体会的更深刻一些。我更习惯在技术角度用消费者的角度来阐述,需要限流的一般原因是消费者能力有限,目的为了避免超过消费者能力而出现系统故障。当然也有其他类似的情况也可以用限流来解决。 限流的表现形式上大部分可以分为两大类: 限制消费者数量。也可以说消费的最大能力值。比如:数据库的连接池是侧重的是总的连接数。还有菜菜以前写的线程池,本质上也是限制了消费者的最大消费能力。 可以被消费的请求数量。这里的数量可以是瞬时并发数,也可以是一段时间内的总并发数。菜菜今天要帮YY妹子做的也是这个。 除此之外,限流还有别的表现形式

Dapper学习(一)之Execute和Query

百般思念 提交于 2021-01-13 21:14:14
Dapper是一个用于.NET的简单的对象映射,并且在速度上有着轻ORM之王的称号。 Dapper扩展IDbConnection,提供有用的扩展方法来查询数据库。 那么Dapper是怎样工作的呢? 总共三步: 创建一个IDbConnection对象 写一个语句来执行CRUD操作 传递语句作为Execute方法的一个参数 因为这篇文章主要是为了学习其中一些方法的使用,所以,这里不再叙述安装等的一些使用,有需要的同学可以参考: https://dapper-tutorial.net/dapper 1.Execute Execute是可以被IDbConnection类型的任何对象调用的扩展方法。它可以执行一个命令一次或者很多次,并且返回受影响的行数。 这个方法可以用于执行: 存储过程(Stored Procedure) 插入语句(INSERT statement) 更新语句(UPDATE statement) 删除语句(DELETE statement) 下面的表格,展示了Execute方法的参数 这里给出一个实现代码的示例,其余部分直接在官网上的示例上面记录学习。 using Dapper; using System; using System.Data.SqlClient; using System.Runtime.Serialization; namespace Dapper

C#使用NPOI快速导出到Excel

拈花ヽ惹草 提交于 2021-01-06 13:51:04
接上篇博文《C#快速导出到excel》:由于此种方法不能导出成.xlsx格式,为解决此问题,本次分享使用NPOI。 参考:https://www.cnblogs.com/lazyneal/p/6148912.html 1、添加程序包。 在项目名右键。 选择管理NuGet程序包,浏览处搜索NPOI并安装。 2、代码引用。 using System.IO; using System.Data.SqlClient; using System.Diagnostics; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; 3、导出Excel方法: public void ExportDataToExcel(DataTable TableName, string FileName) { SaveFileDialog saveFileDialog = new SaveFileDialog(); // 设置文件标题 saveFileDialog.Title = " 导出Excel文件 " ; // 设置文件类型 saveFileDialog.Filter = " Excel 工作簿(*.xlsx)|*.xlsx|Excel 97-2003 工作簿(*.xls)|*.xls " ; //

C#快速导出到Excel

我的未来我决定 提交于 2021-01-06 12:56:31
导出到Excel,基本是很多单据的标配功能了。笔者之前将Datagridview的数据导出到Excel时,将数据一个单元格一个单元格的写入,效率奇慢, 1030条数据花费了将近70s的时间。后来借鉴了前辈们的其它写法,将数据先生成到string变量,再写入,效率提升了150多倍。分享如下: 1、改善后结果: 2、导出到Excel使用的方法: 简要说明: TableName:数据源数据表 FileName:要保存的Excel文件名 lblStatus:ToolStripStatusLable barStatus:ToolStripProgressBar 引用及代码: using System.IO; using System.Data.SqlClient; using System.Threading; using System.Diagnostics; public void ExportDataToExcel(DataTable TableName, string FileName) { SaveFileDialog saveFileDialog = new SaveFileDialog(); // 设置文件标题 saveFileDialog.Title = " 导出Excel文件 " ; // 设置文件类型 saveFileDialog.Filter = " Microsoft

C# 反射 Reflection Assembly

依然范特西╮ 提交于 2020-12-19 09:28:16
本章节带来的是反射,反射反射程序员的快乐。 一、什么叫反射 反射:是.net Framework提供给的一个方面metadata的帮助类,可以获取信息并且使用 反射的有点:动态 反射的缺点:1:稍微麻烦 2:能避开编译器的检查 3:性能损耗 二、反射如何使用: 具体和私用如下: #region 反射的加载方式 /// /获取当前路径下面的dl或者exe,不带后缀(MyReflection.exe 是编译后生成的exe执行文件),从Exe所在的路径进行查找 Assembly assembly = Assembly.Load( @" MyReflection " ); // 获取当前路径下面的dl或者exe Assembly assemblyFrom = Assembly.LoadFrom( @" D:\MyReflection\bin\Debug\MyReflection.exe " ); // 获取当前路径下面的dl或者exe Assembly assemblyFile = Assembly.LoadFile( @" D:\MyReflection\bin\Debug\MyReflection.exe " ); foreach ( var item in assembly.GetModules()) { // Modules当前的exe或者dll的名字(MyReflection

springboot源码分析-SpringApplication

北战南征 提交于 2020-12-13 14:41:30
SpringApplication SpringApplication类提供了一种方便的方法来引导从main()方法启动的Spring应用程序 SpringBoot 包扫描注解源码分析 @SpringBootApplication public class Springbootv2Application { public static void main(String[] args) { // 创建ApplicationContext并启动 new SpringApplication(Springbootv2Application. class ).run(args); } } /** * Run the Spring application, creating and refreshing a new * { @link ApplicationContext}. * @param args the application arguments (usually passed from a Java main method) * @return a running { @link ApplicationContext} */ public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch