上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 54 下一页
摘要: 在移动交通流调查项目的一个算法分析程序中,碰到一个业务问题:用户采集上传的基站定位数据需要进行分析预处理,方案是先按预定格式解析文件并从中提取出成百上千个基站定位数据记录,并合并相同的基站点,根据获取到的基站位置信息作为参数,去请求google 基站定位 api,从而得到对应的基站定位经纬度等信息,接下来再加上华工的算法分析。 在执行华工算法分析逻辑之前,调用谷歌api这一步必需全部完成;网络请求是个耗时的过程,故对每一个请求开启单独的线程(同时请求可能数百个,这里通过Semaphore信号量来控制每次发出请求的最大数,该部分的讨论不再本话题之类)。 问题出来了,那么如何知道所有的网络请求全. 阅读全文
posted @ 2012-12-27 18:18 小锋神 阅读(3934) 评论(3) 推荐(0) 编辑
摘要: 目前项目里面有个需求,需要多线程操作数据库,等待数据库操作完毕之后,主线程才能继续执行以后的操作。想了想,最后决定使用两个信号量来完成这个需求。具体需求如下 :操作数据库的线程最多20个主线程必须等待所有操作数据库的线程返回后,才能进行下一步操作具体操作步骤如下:声明一个最大值为20,初始值为20的信号量s1和一个最大值为1,初始值为0的信号量s2,以及一个任务计数器count。将需要线程池操作的任务数赋给count。在调用线程池的循环中,调用s1的WaitOne方法,在线程的具体操作执行完毕后调用s1的Release方法,并且使用Interlocked的Decrement方法将任务数coun 阅读全文
posted @ 2012-12-21 18:14 小锋神 阅读(963) 评论(0) 推荐(0) 编辑
摘要: 线程池ThreadPool的常用方法介绍如果您理解了线程池目的及优点后,让我们温故下线程池的常用的几个方法:1. public static Boolean QueueUserWorkItem(WaitCallback wc, Object state); WaitCallback回调函数就是前文所阐述的应用程序,通过将一些回调函数放入线程池中让其形成队列,然后线程池会自动创建或者复用线程去执行处理这些回调函数, State: 这个参数也是非常重要的,当执行带有参数的回调函数时,该参数会将引用传入,回调方法中,供其使用3. public static bool SetMaxThreads(in 阅读全文
posted @ 2012-12-21 17:58 小锋神 阅读(25216) 评论(1) 推荐(3) 编辑
摘要: 使用多线程1. 单元模式和Windows Forms 单元模式线程是一个自动线程安全机制, 非常贴近于COM——Microsoft的遗留下的组件对象模型。尽管.NET最大地放弃摆脱了遗留下的模型,但很多时候它也会突然出现,这是因为有必要与旧的API 进行通信。单元模式线程与Windows Forms最相关,因为大多Windows Forms使用或包装了长期存在的Win32 API——连同它的单元传统。 单元是多线程的逻辑上的“容器”,单元产生两种容量——“单的”和“多的”。单线 程单元只包含一个线程;多线程单元可以包含任何数量的线程。单线程模式更普遍 并且能与两者有互操作性。 就像包含线程一样 阅读全文
posted @ 2012-12-18 15:30 小锋神 阅读(625) 评论(0) 推荐(0) 编辑
摘要: 许多应用程序使用多个线程,但这些线程经常在休眠状态中耗费大量的时间来等待事件发生。其他线程可能进入休眠状态,并且仅定期被唤醒以轮询更改或更新状态信息,然后再次进入休眠状态。为了简化对这些线程的管理,.NET框架为每一个进程提供了一个线程池,使应用程序能够根据需要来有效地利用多个线程。一个线程监视排到线程池的若干个等待操作的状态。当一个等待操作完成时,线程池中的一个辅助线程就会执行对应的回调函数。线程池中的线程由系统进行管理,程序员不需要费力于线程管理,可以集中精力处理应用程序任务。线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。 阅读全文
posted @ 2012-12-18 15:29 小锋神 阅读(465) 评论(0) 推荐(0) 编辑
摘要: 其实很简单用ThreadPool.RegisterWaitForSingleObject方法注册一个定时检查线程池的方法,在检查线程的方法内调用ThreadPool.GetAvailableThreads与ThreadPool.GetMaxThreads并比较两个方法返回的值是不是相等,相等表示线池内所有的线程已经完成.//每秒检次一次线程池的状态RegisteredWaitHandle rhw = ThreadPool.RegisterWaitForSingleObject(AutoResetEvent(false), this.CheckThreadPool, null, 1000, fa 阅读全文
posted @ 2012-12-18 15:05 小锋神 阅读(8658) 评论(1) 推荐(0) 编辑
摘要: 在实际运用中经常会创建这样的结构表Category(Id, ParentId, Name),特别是用于树形结构时(菜单树,权限树..),这种表设计自然而然地会用到递归,若是在程序中进行递归(虽然在程序中递归真的更方便一些),无论是通过ADO.NET简单sql查找还是ORM属性关联都会执行多次sql语句,难免会造成一些性能上的损耗,所以干脆使用sql的函数来解决这个问题,用函数返回我们最终需要的结果。针对这类需求,这里我列出三种常用的递归:以一个节点为基点,列出所有子节点直到无子 (找下级) 。这有点儿像点兵点将,主帅只有一个,下面是左将、右将,左将下面又有千夫长、百夫长,点兵时主帅下令集合,下 阅读全文
posted @ 2012-12-09 22:45 小锋神 阅读(670) 评论(0) 推荐(0) 编辑
摘要: using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.IO;using System.Security.Cryptography;using System.Text;name 阅读全文
posted @ 2012-12-09 22:09 小锋神 阅读(964) 评论(0) 推荐(1) 编辑
摘要: 1.创建测试环境,(插入100万条数据大概耗时5分钟)。create database DBTestuse DBTest--创建测试表create table pagetest(id int identity(1,1) not null,col01 int null,col02 nvarchar(50) null,col03 datetime null)--1万记录集declare @i intset @i=0while(@i<10000)begin insert into pagetest select cast(floor(rand()*10000) as int),left(new 阅读全文
posted @ 2012-12-09 22:01 小锋神 阅读(454) 评论(0) 推荐(0) 编辑
摘要: DECLARE @orderno varchar(50) declare @product_no varchar(50) declare @color varchar(50) declare @product_size varchar(50) DECLARE CusCursor CURSOR FOR SELECT orderno FROM tbl_5351_24 OPEN CusCursor FETCH NEXT FROM CusCursor INTO @orderno WHILE (@@FETCH_STATUS = 0) ... 阅读全文
posted @ 2012-11-20 10:57 小锋神 阅读(397) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 54 下一页