愉快的学习并且进步着(一)
2007-04-27 15:46
197 查看
个人网站http://www.massany.cn/之前的版本是在页面打开的时候,才去读取RSS源,以致于第一次访问的时候速度很慢。虽然RSS Toolkit也有自己的缓存机制,但是整体的运行速度还是很慢,而且并不利于一些有价值的新闻内容进行保存。所以考虑了定时多线程读取RSS源的方法。
在Global.aspx的Application_Start里,设置了一个定时器,定时读取RSS源。这里的关键是读取RSS源的多线程处理问题,一开始使用了Thread类来启动多个线程,每个线程都访问一个公共的Queue对象来分配读取任务。其实在C#里还有更简单的方法就可以完成多线程操作,使用线程池ThreadPool类。使用ThreadPool可以不必再关注线程的线节,只需要提供回调方法,线程的调度由线程池来完成。
取数据源的代码很简单。
DataSet ds = new DataSet();
string strSql = "select DefaultState,ID from Widget where Url = 'Widgets/RssWidget.ascx'";
//出错的频道暂时不进行处理。
if (_ErrQueue.Count > 0)
SqlHelper.FillDataset(SqlHelper.ConnectionString, CommandType.Text, strSql, ds, null);
下面将回调方法加入线程池队列:
foreach (DataRow dr in ds.Tables[0].Rows)
lock (_Lock)
for (int i = 0; i < _ErrQueue.Count; i++)
static void ErrorCallBack(Object stateInfo)
{
LoadXML(stateInfo as DataRow);
Thread.Sleep(1000);
}
看看,是简单吧!对于多线程和RSS频道缓存,这是目前我能想到的解决办法,如果大家有更好的主意,不妨交流一下。
我的联系方式:
e-mail:jinyongjinyong@gmail.com
QQ:24615289
在Global.aspx的Application_Start里,设置了一个定时器,定时读取RSS源。这里的关键是读取RSS源的多线程处理问题,一开始使用了Thread类来启动多个线程,每个线程都访问一个公共的Queue对象来分配读取任务。其实在C#里还有更简单的方法就可以完成多线程操作,使用线程池ThreadPool类。使用ThreadPool可以不必再关注线程的线节,只需要提供回调方法,线程的调度由线程池来完成。
取数据源的代码很简单。
DataSet ds = new DataSet();
string strSql = "select DefaultState,ID from Widget where Url = 'Widgets/RssWidget.ascx'";
//出错的频道暂时不进行处理。
if (_ErrQueue.Count > 0)
SqlHelper.FillDataset(SqlHelper.ConnectionString, CommandType.Text, strSql, ds, null);
下面将回调方法加入线程池队列:
foreach (DataRow dr in ds.Tables[0].Rows)
lock (_Lock)
for (int i = 0; i < _ErrQueue.Count; i++)
static void ErrorCallBack(Object stateInfo)
{
LoadXML(stateInfo as DataRow);
Thread.Sleep(1000);
}
看看,是简单吧!对于多线程和RSS频道缓存,这是目前我能想到的解决办法,如果大家有更好的主意,不妨交流一下。
我的联系方式:
e-mail:jinyongjinyong@gmail.com
QQ:24615289
相关文章推荐
- Python web框架Django学习(1)——在win7 64bit下配置开发环境Django:一个可以使Web开发工作愉快并且高效的Web开发框架。 使用Django,使你能够以最小的代价构建和
- Android学习——如何将Fragment添加到Activity,并且在Activity中显示
- 学习是个过程——不断反复不断进步
- 利用FireBug使JQuery的学习更加轻松愉快
- 学习,希望多帮助。共同进步
- 要想进步必须得不停得学习
- Windows Phone 学习 直接在手机中选择照片并且显示
- 找一个你仰慕的人,并且向他学习!
- 保持自己一直处在“学习区”才能持续进步
- 【安卓逆向】继续学习,体验dalvik汇编语言,并且尝试编译运行成功!
- Git学习-->如何通过Shell脚本实现 监控Gitlab备份整个过程并且通过邮件通知得到备份结果?
- android学习1----创建项目并且通过xml设计layout
- 每天进步一点点——记学struts+spring+hibernate的感想,献给所有正在学习软件开发的朋友们
- 学习了 object,system类,并且学习了hibernate
- Android(java)学习笔记107-1:通过反射获得带参构造方法并且使用
- scala学习-scala读取Hbase表中数据并且做join连接查询
- asp.net 学习笔记 从sql中取数据并且绑定到 gridView
- 一起学习,一起进步
- 黑马程序员之WinForm编程基础学习笔记:修改密码。界面上有旧密码,新密码,重复新密码,假设旧密码为888888,两次输入的新密码必须和旧密码不一样,并且两次输入的新密码必须一致。
- directx 学习笔记之一 如何安装并且在visual studio2010的项目中使用directx