一个计费系统的设计问题

hainang1234 2006-01-23 03:03:01
1.这个计费程序要求绝不能死,于是我需要做个检测程序。而这个计费的信息来源是一个Socket连接,这个计费程序是Server端,我是应该跟它收发心跳来检测呢(有可能这个线程是活的可监听的线程已经死了),还是应该不停的监听它所监听的端口来监测他的运行状态呢(有可能虽然在监听但程序已陷入死锁)?

2.由于一不断进行log记录,FileStream打算一直打开,直到程序关闭。
那么在多线程下Write()可能出现并发问题(到底会不会出现不知道,MSDN中只说FileStream类的静态方法可以保证多线程安全,实例方法不能保证多线程安全),于是想出两种方案::
a)用ThreadPool.QueueUserWorkItem方法,回调A函数,A函数:
void A(object obj)
{
lock (filestream)
{
filestream.Write(obj....)
}
}
b)分配一个线程,定义一个委托链表,每次需要写日志时加一个委托到委托链中,而这个线程不停的检查委托链,当不为空时便执行一个并删除它,如此循环(为空时则Thread.Sleep(0)将时间片暂时交给其它线程)
a方案是利用的系统线程池,可以利用其线程池的优化功能。而b方案仅开启一个线程。
不知道这两个方案哪种更好些。
...全文
225 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hainang1234 2006-02-07
  • 打赏
  • 举报
回复
不是吧?!过了年都还没人理!?
hainang1234 2006-02-07
  • 打赏
  • 举报
回复
嘿,第二个问题的b方案有误。
根本没必要用委托,直接检查一个ArrayList里面的数据就行了,有就调用Write,呵。
到真正实现的时候才明白委托指定的是一个函数原型,而与数据无关。
当然,我现在的b方案就是检查一个ArrayList里面的数据,有就写进文件然后删除。
----楼主
hainang1234 2006-02-07
  • 打赏
  • 举报
回复
可是第一种可能会同时占用很多线程池中的线池。第二种一直只有一个线程。
所以我倾向于第二种

我不知道怎么测。我觉得不好观察。

多谢了!

----楼主
hainang1234 2006-02-07
  • 打赏
  • 举报
回复
第一个问题可能没太交待清楚,大家帮忙看看第二个问题吧!
----楼主
jiezhi 2006-02-07
  • 打赏
  • 举报
回复
建议你测试一下哪个更好。

我倾向于第一种
califord 2006-01-23
  • 打赏
  • 举报
回复
不会呀,我是web app的,你是win app

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧