关于多线程请求url解决方案

sainSun 2014-05-12 01:41:36
现在我有个需求是这样的 我们项目中通过微信公众平台的接口向关注公众号的粉丝进行群发消息,但公众平台提供的群发接口不能满足我们的需要
所以我们就通过另一个接口进行发送消息 但使用这个接口相当于和用户一对一的进行发送 所以当发送的用户量比较大的时候 我需要请求
微信提供的url也将会增大 目前我想到的是通过线程池创建多线程进行发送 现在发现模拟1000个用户 发送的速度大概是在1分钟左右
但项目要求需要支持5万以上的用户 所以想请问各位有没有什么更快的方法能够解决我现在的问题呢?
另附上 我现在写的demo
public static Time obj;
public static int index;
static string url = WeChatURL.AccessToken.Replace("$appid$", "111111").Replace("$appsecret$", "22222");
static void Main(string[] args)
{

obj=new Time();
for (int i=0;i<10000;i++)
{
ThreadPool.QueueUserWorkItem(Send,i);

}

}


private static void Send(object o)
{

lock(obj)
{ DateTime d=DateTime.Now;
{
try
{
WeChatHelper.HttpQuery(url, "get");
Thread.Sleep(10);
}
catch (Exception)
{
Console.WriteLine("error :" + Thread.CurrentThread.ManagedThreadId);
}
}

index++;
TimeSpan s = DateTime.Now - d;
obj.SetTotal(s);
Console.WriteLine(string.Format("\r\n{0} current runtime:{1}\r\n", index,obj));
}

}


public class Time
{
public TimeSpan total { get; set; }

public void SetTotal(TimeSpan s)
{
total += s;

}

public override string ToString()
{
return total.ToString();
}
}
...全文
321 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdashewan 2014-05-12
  • 打赏
  • 举报
回复
假设你Maxthreads是1023,那么1023 - 当前活动数目 = 1014 那么就是说你当前活动数目 = 9,那么这效率肯定很低,你自己查下代码
sainSun 2014-05-12
  • 打赏
  • 举报
回复
引用 3 楼 sainSun 的回复:
[quote=引用 2 楼 xdashewan 的回复:] 你看下活动状态的线程池的请求数目是多少
是ThreadPool.GetAvailableThreads? 输出1014[/quote] 因为没设置Maxthreads 所以是1023
xdashewan 2014-05-12
  • 打赏
  • 举报
回复
引用 3 楼 sainSun 的回复:
[quote=引用 2 楼 xdashewan 的回复:] 你看下活动状态的线程池的请求数目是多少
是ThreadPool.GetAvailableThreads? 输出1014[/quote] GetAvailableThreads是由 GetMaxThreads 返回的线程池线程的最大数目和当前活动数目之间的差值。 你还是要看一下GetMaxThreads有多少
sainSun 2014-05-12
  • 打赏
  • 举报
回复
引用 2 楼 xdashewan 的回复:
你看下活动状态的线程池的请求数目是多少
是ThreadPool.GetAvailableThreads? 输出1014
xdashewan 2014-05-12
  • 打赏
  • 举报
回复
你看下活动状态的线程池的请求数目是多少

110,533

社区成员

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

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

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