本帖最后由 myassistant 于 2012-03-01 20:32:49 编辑

解决方案 »

  1.   

    请问用线程池为什么要用Timer,我这不涉及定时的处理啊
      

  2.   

    线程量较大时,要注意设置线程栈的大小,缺省为2MB,如果100个摄像头,考虑收发、处理等等,可能需要500以上线程,如果按缺省2MB/线程算,那就是1GB,而如果减少到256KB/线程,那只需要100MB而已
      

  3.   

    用线程池(QueueUserWorkItem)以列队的方式,当有可用线程时,会自动使用线程池内的线程.
    不要说你那100个,我这里工作流最大任务时有1万个在运行的工作流,用线程都可以很好的解决.
    最简单的调用如下:(若要深入请参考相关资料)System.Threading.ThreadPool.QueueUserWorkItem(new WaitCallback(obj =>
      {
          //你的代码              
      }));     
      

  4.   

    同意sp1234。
    建议你去研究一下APM(Asynchronous Programming Model),这是一个链接:
    http://msdn.microsoft.com/en-us/magazine/cc163467.aspx
      

  5.   


    你提的非阻塞方式倒是可以考虑,只是这个是对每个摄像头的是这样的,可以不用等别的摄像头等完成再登录,但是这里除了14秒内要给100个摄像头发送请求,CPU还要处理文件切断操作(比如每个30分钟生成一个文件,如果掉线我必须切断生成的文件,重新开始新的录制),还要处理网络断线重连等操,所以我觉得两个线程是不够的。
      

  6.   

    呵呵,iscsi直写是多么美妙
    如果用传统ip cam的话,那么就直接开100个线程取流后缓冲到一定数量后写磁盘
    高级方法就不提了,以免你走火入魔
      

  7.   

    超过CPU个数两倍的核心处理线程量,就应该考虑程序架构是否合理了。
    假如你要处理上万个TCP在线连接,你是不是打算开上万个线程
      

  8.   

    这与我之前做的类似   如果你用的是tcp或者udp协议 或许一个线程去处理就够了  或者可以多开端口 
    我不知道你用的什么协议 
    之前我也有处理过这种问题  一般线程不会太多   可以开一个线程专门维持链路  或者用tcp自带的异步去处理一下如果心跳包没了  直接销毁连接就行了