摘要:
现在系统中常用的获取客户端真实ip的代码如下: // 获取IP地址protected string GetIPAddress(){ string result = ""; try { //透过代理取客户端ip result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? ""; if (result == "") { //连接主机ip result = HttpContext.Current.Request.Serve 阅读全文
摘要:
新浪有开放ip查询的接口(http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=123.124.2.85),通过不断查询就能抓取到ip信息。不过要遍历所有的ip地址不现实,数据存储和查询都是问题,一般我们面对的是中国的用户,只需要遍历抓取下中国范围的ip信息就行,而且ip地址最后一位的256个ip一般分配到同一地区,所以最后一位只需遍历.0的ip就可以了。 目前ip4地址已经分配完,中国的ip段可以在以下网址找到 阅读全文
摘要:
1、为什么需要使用线程池(Thread Pool)
减少线程间上下文切换。线程执行一定的时间片后,系统会自动把cpu切换给另一个线程使用,这时还需要保存当前的线程上下文状态,并加载新线程的上下文状态。当程序中有大量的线程时,每个线程分得的时间片会越来越少,可能会出现线程未处理多少操作,就需要切换到另一线程,这样频繁的线程间上下文切换会花费大量的cpu时间。
减少内存占用。系统每创建一条物理线程,需要大概花费1MB的内存空间,许多程序喜欢先创建多条物理线程,并周期轮询来处理各自的任务,这样既消耗了线程上下文切换的时间,还浪费了内存。这些任务可能只需要一条线程就能满足要求。假如某一任务需要执行较长的周期,线程池还可以自动增加线程,并在空闲时,销毁线程,释放占用的内存。 阅读全文