定时事件任务池

1.为什么要使用定时任务池? 任务池可以让我们将某些需要程序循环定时执行的一系列方法自动地执行,你只需要将想要定时执行的任务扔进任务池即可,而任务池则会自动并行地调用你想要执行的方法。 2.实现 首先我们任务池的生命周期是跟程序绑定的话,我们在开始设计的时候最好将其设计为一个静态类。 1 2 3 4 5 6 7 public static TaskPool { private static int m_loopTime; private static List<CallBackFunc> m_taskPool; private Thread m_daemonThread; private bool m_running; } 在上面我们声明了一些必须的变量,例如循环调用间隔,任务池列表,以及守护线程和运行状态。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 public static class TimerPool { /// <summary> /// 回调委托 /// </summary> public delegate void CallBackFunc(); private static int m_loopTime; private static List<CallBackFunc> m_taskPool; private static Thread m_daemonThread; private static bool m_running; private static void CallFunction() { while(m_running) { Thread.

在一个日期列表当中根据天、周、月、季度、年返回相应的统计数据

换了一家公司,当天便接到一个统计模块的开发,要求是从数据库当中提取到指定时间段的数据,并按照前端给的分割单位时间进行数据返回,统计什么呢?就是统计这些记录在某一天有几条,某一周有几条,以此类推。 例如: 0 2016/8/12 12:00 xxxxxxx 1 2016/8/12 14:51 xxxxxxx 2 2016/8/13 01:52 xxxxxxx 3 2016/8/18 20:14 xxxxxxx 4 2016/8/18 20:16 xxxxxxx 5 2016/8/13 12:08 xxxxxxx 提取数据简单,因为用的EF框架,所以直接从DBSession当中用linq抓取数据即可,我们将这些日期数据存储在List容器内。 不过后面才是正题,数据是抓取到了,不过我们又该怎样从这一堆数据当中,按照天、周、月、季度、年来分割数据呢? 首先我们先要获取到这个时间段的相差天数: 开始时间为StartTime,结束时间为EndTime,由于这两个都是属于DateTime类型的变量,所以我们直接用EndTime减去StartTime就可以获得一个TimeSpan对象,直接获取该对象的Day属性,就能获得他们相差的天数了。 下面就是重点了,我们这里的目标 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 private List<resultModel> getAllDays(int diffDay, string StartTime, List<DateTime> dateList) { var _num_Date_List = new List<resultModel>(diffDay); var d1 = Convert.ToDateTime(StartTime); for (int i = 0; i < diffDay; i++) { int count = 0; for (int j = 0; j < dateList.

互斥锁与自旋锁

锁原理 互斥锁:线程会从sleep(加锁)——>running(解锁),过程中有上下文的切换,cpu的抢占,信号的发送等开销。 自旋锁:线程一直是running(加锁——>解锁),死循环检测锁的标志位,机制不复杂。 锁区别 互斥锁的起始原始开销要高于自旋锁,但是基本是一劳永逸,临界区持锁时间的大小并不会对互斥锁的开销造成影响,而自旋锁是死循环检测,加锁全程消耗cpu,起始开销虽然低于互斥锁,但是随着持锁时间,加锁的开销是线性增长。 锁应用 互斥锁用于临界区持锁时间比较长的操作,比如下面这些情况都可以考虑 临界区有IO操作 临界区代码复杂或者循环量大 临界区竞争非常激烈 单核处理器 至于自旋锁就主要用在临界区持锁时间非常短且CPU资源不紧张的情况下。

ASP.NET MVC 在上下文中找不到 owin.Environment 项。

英文则是:No owin.Environment item was found in the context 这个错误源自于: 1 2 3 4 5 private IAuthenticationManager AuthenticationManager { get { return HttpContext.GetOwinContext().Authentication; } } 使用的是ASP.NET Identity身份认证系统,在使用AuthenticationManager的时候,发生了一个异常。提示“在上下文中找不到 owin.Environment 项”,百度谷歌半天无果。 之后感觉是自己缺少Startup类的原因,在项目根目录加入了一个cs文件,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 using Microsoft.Owin; using Owin; [assembly: OwinStartupAttribute(typeof(NovelSite.Startup))] namespace NovelSite { public partial class Startup { public void Configuration(IAppBuilder app) { ConfigureAuth(app); } } } 运行,仍然抛出异常,按照ASP.NET Identity登录原理一文中所说: 每一个OWin的应用程序都需要有一个start up的类,用来声明我们要使用的OWin组件(即中间件)。Start up 类有以下几种声明方式。

ASP.NET + 使用Mysql作为数据库

下载Mysql for VisualStudiohttp://dev.mysql.com/downloads/windows/visualstudio/ 下载连接器http://dev.mysql.com/downloads/connector/net/ 使用Nuget安装EF。 使用Nuget安装Mysql.Data 修改web.config的connectionStrings连接字符串如下: 1 2 3 <connectionStrings> <add name="DefaultConnection" connectionString="Data Source=服务器IP;port=3306;Initial Catalog=数据库名称;user id=用户名;password=密码;" providerName="MySql.Data.MySqlClient" /> </connectionStrings> 重要一定要在entityFramework节上增加codeConfigurationType=“MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6"属性。 1 2 3 4 5 6 7 8 9 10 <entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6"> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider></providers> </entityFramework>
Built with Hugo
主题 StackJimmy 设计