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方案仅开启一个线程。
不知道这两个方案哪种更好些。

解决方案 »

  1.   

    不会呀,我是web app的,你是win app
      

  2.   

    嘿,第二个问题的b方案有误。
    根本没必要用委托,直接检查一个ArrayList里面的数据就行了,有就调用Write,呵。
    到真正实现的时候才明白委托指定的是一个函数原型,而与数据无关。
    当然,我现在的b方案就是检查一个ArrayList里面的数据,有就写进文件然后删除。
                                                            ----楼主