当前位置: 首页 > news >正文

网站策划与建设阶段的推广的目标/2023上海又出现疫情了

网站策划与建设阶段的推广的目标,2023上海又出现疫情了,怎么建立网站 个人,网页源代码提取视频在系统设计中,经常会使用“池”的概念。比如数据库连接池,socket连接池,线程池,组件队列。“池”可以节省对象重复创建和初始化所耗费 的时间,可以简化对象获取和使用的过程。对于那些被系统频繁请求和使用的对象&…

在系统设计中,经常会使用“池”的概念。比如数据库连接池,socket连接池,线程池,组件队列。“池”可以节省对象重复创建和初始化所耗费 的时间,可以简化对象获取和使用的过程。对于那些被系统频繁请求和使用的对象,如果使用这种机制,可以使系统性能得到很大提高。特别象数据库连接这种对 象,客户端与数据库服务器端建立连接时,是比较慢的,如果每次进行数据库操作,都要先进行数据库连接,系统效率将非常低下。

“池”的概念就是将被使用的对象事先创建好,保存在列表中,供客户端取用。当客户端取得一个对象时,这个对象就已经是按照特定上下文环境初始化好,马上即 可使用的了。当客户端使用完毕,需要将对象归还给“池”,最后,在系统生命期结束时,由“池”统一释放这些对象。从另一个概念上来说,这也是一种“以空间 换时间”的做法,我们在内存中保存一系列整装待命的对象,供人随时差遣。与系统效率相比,这些对象所占用的内存空间太微不足道了。

“池”的结构是通用的,就是不管他里面保存的是哪一种对象,他的工作方法都基本不变。无非是初始化一系列对象,然后提供一个获取可用对象,一个归还对象的接口。

 

//
// 对象池
//
//using System;
using System.Collections.Generic;
using System.Text;using System.Timers;
using System.Collections;namespace objectPool
{/// <summary>/// 对象池/// </summary>/// <typeparam name="T">对象类型</typeparam>abstract class objectPool<T>{/// <summary>/// 最后取出对象时间/// </summary>private long longLastCheckOut = 0;/// <summary>/// 记录当前正在使用对象Hashtable/// </summary>private static Hashtable objLocked;/// <summary>/// 记录全部空闲及可用对象Hashtable/// </summary>private static Hashtable objUnLocked;/// <summary>/// 检查所有空闲及可用对象时间间隔:60秒(用于垃圾回收)/// </summary>private static long CLEANINTERVAL = 60 * 1000;/// <summary>/// 初始化成员变量/// </summary>static objectPool(){// 实例化对象objLocked = Hashtable.Synchronized(new Hashtable());objUnLocked = Hashtable.Synchronized(new Hashtable());}/// <summary>/// 创建一个新的对象/// </summary>/// <returns>对象实例</returns>protected abstract T Create();/// <summary>/// 检查特定对象有效性/// </summary>/// <param name="t">对象实例</param>/// <returns>是否有效 true or false</returns>protected abstract bool ValiDate(T t);/// <summary>/// 删除对象/// </summary>/// <param name="t">对象实例</param>protected abstract void Expire(T t);/// <summary>/// 构造函数/// </summary>internal objectPool(){// 取得现在时间longLastCheckOut = DateTime.Now.Ticks;// 实例化一个Timer对象Timer timer = new Timer();// 设置时间间隔timer.Interval = CLEANINTERVAL;timer.Enabled = true;// 到达时间间隔发生(垃圾回收)timer.Elapsed += delegate{lock (this){long longNow = DateTime.Now.Ticks;try{foreach (DictionaryEntry entry in objUnLocked){T t = (T)entry.Key;// 超出垃圾回收时间间隔if (longNow - (long)objUnLocked[t] > CLEANINTERVAL){// 从可用对象中排除objUnLocked.Remove(t);// 删除对象Expire(t);}}}catch (Exception){ }}};}/// <summary>/// 从池中获取对象/// </summary>/// <returns>对象实例</returns>internal T GetObjectFromPool(){long longNow = DateTime.Now.Ticks;longLastCheckOut = longNow;T t;lock (this){try{foreach (DictionaryEntry entry in objUnLocked){t = (T)entry.Key;// 如果对象有效if (ValiDate(t)){// 设置为非空闲对象objUnLocked.Remove(t);objLocked.Add(t, longNow);return t;}else{// 删除对象objUnLocked.Remove(t);Expire(t);}}}catch (Exception){ }// 新创建对象t = Create();// 设置为正在使用对象objLocked.Add(t, longNow);}return t;}/// <summary>/// 将对象放入池中/// </summary>/// <param name="t">对象实例</param>internal void ReturnObjectToPool(T t){if (!object.Equals(null, t)){lock (this){// 设置对象为空闲对象objLocked.Remove(t);objUnLocked.Add(t, DateTime.Now.Ticks);}}}}
}

DBConn类:

using System;
using System.Collections.Generic;
using System.Text;using System.Data;
using System.Data.SqlClient;namespace objectPool
{/// <summary>/// 数据库连接对象池/// </summary>class DBConn : objectPool<SqlConnection>{/// <summary>/// 私有构造函数/// </summary>private DBConn(){ }/// <summary>/// 返回自身对象(Singleton)/// </summary>public static readonly DBConn Instance = new DBConn();/// <summary>/// 默认连接语句/// </summary>private static string strConnStr = @"Data Source=WORK0249\;Initial Catalog=AdventureWorks;Persist Security Info=True;User ID=sa;Password=sa";/// <summary>/// 连接语句(属性)/// </summary>public string StrConnStr{get{return strConnStr;}set{strConnStr = value;}}/// <summary>/// 创建数据库连接对象/// </summary>/// <returns>已打开的数据库连接对象</returns>protected override SqlConnection Create(){SqlConnection conn = new SqlConnection(strConnStr);conn.Open();return conn;}/// <summary>/// 验证连接状态/// </summary>/// <param name="t">数据库连接对象</param>/// <returns>连接状态Open : true   Close:false</returns>protected override bool ValiDate(SqlConnection t){try{return !(t.State.Equals(ConnectionState.Closed));}catch (SqlException){return false;}}/// <summary>/// 关闭数据库连接/// </summary>/// <param name="t">数据库连接对象</param>protected override void Expire(SqlConnection t){try{t.Close();}catch (SqlException){ }}/// <summary>/// 从池中获取数据库连接/// </summary>/// <returns>数据库连接对象</returns>public SqlConnection BorrowDBConn(){try{return base.GetObjectFromPool();}catch (Exception ex){throw ex;}}/// <summary>/// 将连接对象放入池中/// </summary>/// <param name="conn">数据库连接对象</param>public void ReturnDBConn(SqlConnection conn){base.ReturnObjectToPool(conn);}}
}

使用示例:

using System;
using System.Collections.Generic;
using System.Text;using System.Data.SqlClient;namespace objectPool
{class Program{static void Main(string[] args){DBConn dbconn = DBConn.Instance;// 从池中取出对象SqlConnection conn = dbconn.BorrowDBConn();string strSql = "SELECT AddressID, AddressLine1, AddressLine2, City, StateProvinceID, PostalCode, " +"rowguid, ModifiedDate FROM Person.Address";SqlCommand command = new SqlCommand(strSql, conn);SqlDataReader reader = command.ExecuteReader();while (reader.Read()){Console.Write(reader[0]);}// 将对象放入池中dbconn.ReturnDBConn(conn);Console.Read();}}
}

转载于:https://www.cnblogs.com/EasyLive2006/archive/2011/01/28/1946929.html

http://www.lbrq.cn/news/775585.html

相关文章:

  • 营销网站建站公司/网络推广费用大概价格
  • 手机上怎么自己做网站/网站推广怎么做
  • java购物网站扫码支付怎么做/品牌策略包括哪些内容
  • 朝阳区网站开发公司/抖音引流推广怎么做
  • 可以接项目做的网站/可以免费推广的平台
  • 城乡企业建设部网站/站长统计app软件
  • 上海网站建设宣传/百度网址大全官网
  • 外包网络安全管理制度/厦门谷歌seo
  • 怎么样用css做网站/广州最新消息
  • wordpress专题页面/seo优化网站优化排名
  • 织梦cms做多语言的网站/seo搜索引擎优化5
  • 企业管理系统代码/抖音关键词优化
  • axure怎么做网站原型/seo怎么提升关键词的排名
  • 企业销售网站建设/优化百度seo技术搜索引擎
  • 周口网站建设/广州搜发网络科技有限公司
  • 怎么把自己电脑建设网站/每日舆情信息报送
  • wordpress 停止/长沙网站seo报价
  • 公司网站必须做可信认证吗/武汉建站公司
  • 网站备案成功后该怎么做/百度权重10的网站
  • 合肥网站建站工作室/没广告的视频播放器app
  • 网站修改备案号/品牌全网推广
  • 制作婚纱摄影网站管理图/在线葡京在线葡京
  • wordpress 图片选择/如何优化网络延迟
  • wordpress插件写js/seo自学网
  • 电商网站前端模板下载/百度股市行情上证指数
  • 企业网站推广阶段/四川seo选哪家
  • WordPress页脚添加日期/百度谷歌seo优化
  • 上海网站建设设计公司/全网营销代理加盟
  • 购买高仿手表网站/青岛seo网络推广
  • 今天国际最新消息/关键词优化公司网站
  • 用 Apache Iceberg 与 Apache Spark 在 Google Cloud 打造高性能、可扩展的数据湖仓
  • 自动化备份全网服务器数据平台项目
  • 数学建模——回归分析
  • 攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DNS欺骗、DHCP饿死)
  • node.js 学习笔记3 HTTP
  • #4:MinIO分片上传和集群部署