将数据不断地加入到一个线程中的TLIST队列中,线程处理TLIST中的数据比添加的时间要慢,导致TLIST队列会越来越大,内存也不断增加,在不想掉失队列中的数据的情况下有什么办法解决这个问题?

解决方案 »

  1.   

    把你的TList最好使用TThreadList放到一个主线程里面控制数据的添加与调用处理线程,再写一个独立线程来处理TList内的数据但不处理TList,数据量大的话可以考虑使用线程池
      

  2.   

    多个线程来处理这个List,写一个专门的过程来负责分发任务,看哪个线程相对空闲就发往哪个线程的队列
      

  3.   

    算法问题,如果你非常在意内存空间,最好不要用TList,而是直接操作内存(链表);如果在意访问的速度,用动态数组(其实也可以直接开辟内存,用地址偏移,和数组下标访问的速度是一样的).
    还有如果你字段类型为固定大小类型,则非常好办,如果是字符串等不固定类型,则要麻烦些
      

  4.   

    要根本解决还是要提高处理 TList 的速度,也许里面算法可以改进呢?挂起不是办法。既然要缓存,那就是读数据速度不能由你控制,挂起就起不到缓存作用了。反之,要是你本身能控制读数据的速度,何不由此线程来控制:处理一条再读一条。那就不需要缓存了。总之,这里的逻辑好像有点乱。
      

  5.   

    线程是如何从list中取数据处理的?如果是类似:
    process(List[0]);
    List.Delete(0);
    这样的话那么不慢就有鬼了。每次delete就相当于复制整个list一遍,在list不断增加的情况下只会越来越慢。