c# 线程池老是中断 什么原因呢?

问题描述

protectedvoidbtn_Single2_Click(objectsender,EventArgse){try{if(txtSingle2.Text.Trim()==""){return;}M_BaseInfomodel=newB_BaseInfo().SelectOneBaseInfo_List(Convert.ToInt32(txtSingle2.Text.Trim()));ThreadPool.SetMaxThreads(5,5);for(inti=0;i<8000;i++){varxxxxxxx="";stringurl_baidu="http://www.baidu.com/s?wd="+xxxxxxx+"";temp_modelmodel123=newtemp_model();model123.m_baseInfo=model;model123.times=i;ThreadPool.UnsafeQueueUserWorkItem(newWaitCallback(testInfo),model123);}}catch(Exceptionex){throwex;}}

testInfo函数里面就是HttpWebRequestget方式抓取数据。为毛执行一段时间之后就停止执行了。怎么找都找不到原因cpu内存也没有什么异常但是程序停止抓取了什么原因呢?

解决方案

解决方案二:
xxxxxxx一直不变?为啥你老是抓取同一个页面
解决方案三:
model123.times=i;这又是要闹哪样时间越来越长?
解决方案四:
引用2楼Z65443344的回复:

model123.times=i;这又是要闹哪样时间越来越长?

这个就是一个参数不管的xxxxxxx是变的就是一个字符串
解决方案五:
不是中断你用发的webclient还是webrequest?默认只能同时发2个请求加上这个System.Net.ServicePointManager.DefaultConnectionLimit=512;在配置节里面加上默认不需要代理第一次请求速度加快<system.net><defaultProxyenabled="false"useDefaultCredentials="false"><proxy/><bypasslist/><module/></defaultProxy></system.net>
解决方案六:
你应该贴些线程执行的代码出来.
解决方案七:
引用4楼zhuankeshumo的回复:

不是中断你用发的webclient还是webrequest?默认只能同时发2个请求加上这个System.Net.ServicePointManager.DefaultConnectionLimit=512;在配置节里面加上默认不需要代理第一次请求速度加快<system.net><defaultProxyenabled="false"useDefaultCredentials="false"><proxy/><bypasslist/><module/></defaultProxy></system.net>

webrequest现在是中断能看出来的没执行一次我都有日志记录能记录执行到哪一步
解决方案八:
引用6楼wl123858567的回复:

Quote: 引用4楼zhuankeshumo的回复:
不是中断你用发的webclient还是webrequest?默认只能同时发2个请求加上这个System.Net.ServicePointManager.DefaultConnectionLimit=512;在配置节里面加上默认不需要代理第一次请求速度加快<system.net><defaultProxyenabled="false"useDefaultCredentials="false"><proxy/><bypasslist/><module/></defaultProxy></system.net>

webrequest现在是中断能看出来的没执行一次我都有日志记录能记录执行到哪一步

你把这个加上试试System.Net.ServicePointManager.DefaultConnectionLimit=512;并行的话一般第三个webrequest线程会导致阻塞

时间: 2024-08-30 17:15:22

c# 线程池老是中断 什么原因呢?的相关文章

ava实现线程池原理:适用于电商网站之类的交互频繁的网站

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务.线程池线程都是后台线程.每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中.如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙.如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值.超过最大值的线程可以排队,但他们要等到其他线程完成后才启动. 组成部分 1.线程池

Java线程池的理论与实践

前段时间公司里有个项目需要进行重构,目标是提高吞吐量和可用性,在这个过程中对原有的线程模型和处理逻辑进行了修改,发现有很多基础的多线程的知识已经模糊不清,如底层线程的运行情况.现有的线程池的策略和逻辑.池中线程的健康状况的监控等,这次重新回顾了一下,其中涉及大量java.util.concurrent包中的类.本文将会包含以下内容: Java中的Thread与操作系统中的线程的关系 线程切换的各种开销 ThreadGroup存在的意义 使用线程池减少线程开销 Executor的概念 Thread

Marble原理之线程池

本章节依赖于[Marble使用],阅读本章节前请保证已经充分了解Marble 线程池概述 由于Marble属于框架性项目,用户接入Marble不关心Marble的实现机制.因此Marble在做相关处理时对资源的消耗要可控,不能因为Marble的原因导致接入的应用不可用(比如资源耗尽). 此外,Marble-Agent每次收到RPC调度为了不阻塞都会新开线程进行JOB执行,对线程的使用非常频繁,因此必须使用同一的线程池进行Marble的资源使用收口. 对于线程池 Java已经做了很好的封装,大部分

线程池的原理和基本实现

线程创建的基本知识 (1)创建线程 创建线程有两种方式:继承Thread或实现Runnable. Thread实现了Runnable接口,提供了一个空的run()方法,所以不论是继承Thread还是实现Runnable,都要有自己的run()方法.  一个线程创建后就存在,调用start()方法就开始运行,调用wait进入等待或调用sleep进入休眠期,顺利运行完毕或休眠被中断或运行过程中出现异常而退出销毁. (2)线程的生命周期 当线程被创建之后,不是一启动就进入执行状态,也不是一直处于执行状

Java并发编程:线程池的使用

以下是本文的目录大纲: 一.Java中的ThreadPoolExecutor类 二.深入剖析线程池实现原理 三.使用示例 四.如何合理配置线程池的大小 若有不正之处请多多谅解,并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: 一.Java中的ThreadPoolExecutor类 java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必须先了解这个类.下面我们来看一下ThreadPoolExec

Java并发编程:线程池的使用(转)

Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间. 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的效果.今天我们就来详细讲解一下Java的线程池,首先我们从最核心的ThreadPool

线程池源码分析-ThreadPoolExecutor

1 系列目录 线程池接口分析以及FutureTask设计实现 线程池源码分析-ThreadPoolExecutor 该系列打算从一个最简单的Executor执行器开始一步一步扩展到ThreadPoolExecutor,希望能粗略的描述出线程池的各个实现细节.针对JDK1.7中的线程池 2 ThreadPoolExecutor 从上一篇文章中了解到:核心execute(futureTask)方法需要被子类来实现,所以我们就俩重点看看ThreadPoolExecutor是如何实现这个核心方法的 2.

.NET 中的多线程的概念与线程池

为什么使用多线程 1.使用户界面能够随时相应用户输入 当某个应用程序在进行大量运算时候,为了保证应用程序能够随时相应客户的输入,这个时候我们往往需要让大量运算和相应用户输入这两个行为在不同的线程中进行. 2.效率原因 应用程序经常需要等待一些资源,如等待网络资源,等待io资源,等待用户输入等等.这种情况下使用多线程可以避免CPU长时间处于闲置状态. 用户态,内核态 线程内的资源有两种运行态,即用户态和内核态.某些运算可以在堆栈上进行,这种情况线程是在用户态运行的,某些需要高权限运行的指令,或者某

Java多线程和线程池

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 1.为什么要使用线程池 在Java中,如果每个请求到达就创建一个新线程,开销是相当大的.在实际使用中,服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多.除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源.如果在一个jvm里创建太多的线程,可能会使系统由于过度消耗内存或"切换过度"而导致系统资源不足.为了防止资源