已经写好了,是多线程的,可以识别验证码自动登陆的发贴机器人,经过实验发现开3个线程的时候效率最高,开再多的线程速度反而慢下来了,但是随后又发现,几个发贴机器人一起开,每个开3线程,总的效率提升非常多,这是为什么?
如果我想只开一个多线程的,让他效率最高,怎么做.
using System;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Drawing;
using System.Threading;
using System.Timers;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
int[] htable = new int[10] { 1470, 1896, 1875, 1465, 1543, 1592, 1526, 2437, 1379, 1739 };
static CookieCollection cookiecoll;
Encoding coding = Encoding.GetEncoding("UTF-8");
bool bstart = false;
int iFreq = 2;
static int count = 0;
static bool isDD = false;
AutoResetEvent autoevent = new AutoResetEvent(true);
Thread[] newThread = new Thread[50];
static Thread kongzhi; private string GetsRand() //识别验证码
{
int i, j;
string sRand = null;
try
{
HttpWebRequest request;
HttpWebResponse response;
request = (HttpWebRequest)WebRequest.Create(@"验证码图片地址");
request.CookieContainer = new CookieContainer();
request.Timeout = 200;
request.CookieContainer.Add(cookiecoll);
request.ServicePoint.Expect100Continue = false;
response = (HttpWebResponse)request.GetResponse();
Stream rp = response.GetResponseStream();
Bitmap bmap = new Bitmap(rp);
for (int num = 0; num <= 3; num++)
{
Bitmap bbmp = bmap.Clone(new Rectangle(4 + 14 * num, 4, 8, 16), bmap.PixelFormat);
Color cc = bbmp.GetPixel(4, 0);
int hash = 0;
for (i = 0; i <= 7; i++)
{
for (j = 0; j <= 15; j++)
{
if (cc != bbmp.GetPixel(i, j))
{
bbmp.SetPixel(i, j, Color.White);
hash += i * j;
}
else
{
bbmp.SetPixel(i, j, Color.Black);
}
}
}
for (i = 0; i <= 9; i++)
if (htable[i] == hash)
break;
sRand += i.ToString();
}
response.Close();
}
catch (System.Exception ex)
{
//MessageBox.Show(ex.ToString());
}
return sRand;
} public Form1()
{
InitializeComponent();
}
如果我想只开一个多线程的,让他效率最高,怎么做.
using System;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Drawing;
using System.Threading;
using System.Timers;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
int[] htable = new int[10] { 1470, 1896, 1875, 1465, 1543, 1592, 1526, 2437, 1379, 1739 };
static CookieCollection cookiecoll;
Encoding coding = Encoding.GetEncoding("UTF-8");
bool bstart = false;
int iFreq = 2;
static int count = 0;
static bool isDD = false;
AutoResetEvent autoevent = new AutoResetEvent(true);
Thread[] newThread = new Thread[50];
static Thread kongzhi; private string GetsRand() //识别验证码
{
int i, j;
string sRand = null;
try
{
HttpWebRequest request;
HttpWebResponse response;
request = (HttpWebRequest)WebRequest.Create(@"验证码图片地址");
request.CookieContainer = new CookieContainer();
request.Timeout = 200;
request.CookieContainer.Add(cookiecoll);
request.ServicePoint.Expect100Continue = false;
response = (HttpWebResponse)request.GetResponse();
Stream rp = response.GetResponseStream();
Bitmap bmap = new Bitmap(rp);
for (int num = 0; num <= 3; num++)
{
Bitmap bbmp = bmap.Clone(new Rectangle(4 + 14 * num, 4, 8, 16), bmap.PixelFormat);
Color cc = bbmp.GetPixel(4, 0);
int hash = 0;
for (i = 0; i <= 7; i++)
{
for (j = 0; j <= 15; j++)
{
if (cc != bbmp.GetPixel(i, j))
{
bbmp.SetPixel(i, j, Color.White);
hash += i * j;
}
else
{
bbmp.SetPixel(i, j, Color.Black);
}
}
}
for (i = 0; i <= 9; i++)
if (htable[i] == hash)
break;
sRand += i.ToString();
}
response.Close();
}
catch (System.Exception ex)
{
//MessageBox.Show(ex.ToString());
}
return sRand;
} public Form1()
{
InitializeComponent();
}
{
if (this.Visible)
{
this.Visible = false;
this.Hide();
this.WindowState = FormWindowState.Minimized;
}
else
{
this.Visible = true;
this.Show();
this.WindowState = FormWindowState.Normal;
}
} private void Form1_Load(object sender, EventArgs e)
{
notifyIcon1.Icon = new Icon("MSN.ICO");
notifyIcon1.Text = "";
notifyIcon1.Visible = true;
notifyIcon1.Click += new System.EventHandler(this.click);
dateTimePicker1.MouseWheel += new MouseEventHandler(dateTimepicker1_mousewheel);
} private void dateTimepicker1_mousewheel(object sender, System.Windows.Forms.MouseEventArgs e)
{ } private void vv() //刷
{
while (true)
{
try
{
HttpWebRequest request;
HttpWebResponse response;
byte[] bdata;
string postMessage, rand;
rand = GetsRand();
request = (HttpWebRequest)WebRequest.Create(@"");
request.CookieContainer = new CookieContainer();
request.Timeout = 200;
request.CookieContainer.Add(cookiecoll);
request.Method = "POST";
request.AllowAutoRedirect = false;
request.ServicePoint.Expect100Continue = false;
request.KeepAlive = true;
request.Referer = @"";
request.Accept = @"application/x-shockwave-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
request.UserAgent = @"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";
request.Host = @"";
request.ContentType = @"application/x-www-form-urlencoded";
postMessage = @"selectionId=" + rand;
bdata = coding.GetBytes(postMessage);
request.ContentLength = bdata.Length;
request.GetRequestStream().Write(bdata, 0, bdata.Length);
request.GetRequestStream().Flush();
request.GetRequestStream().Close();
response = (HttpWebResponse)request.GetResponse();
StreamReader readStream = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
response.Close();
count++;
this.Invalidate();
this.Update();
Thread.Sleep(20);
}
catch (System.Exception ex)
{
}
}
} private void kz() //制造线程
{
for (int i = 0; i < iFreq; i++)
{
newThread[i] = new Thread(vv);
newThread[i].IsBackground = true;
newThread[i].Start();
Thread.Sleep(40);
}
autoevent.WaitOne();
for (int i = 0; i < iFreq; i++)
newThread[i].Abort();
} private void button1_Click(object sender, EventArgs e)
{
HttpWebRequest request;
HttpWebResponse response;
byte[] bdata;
string postMessage, rand; if (bstart)
{
button1.Text = "开始";
bstart = false;
autoevent.Set();
}
else
{
timer1.Stop();
button2.Text = "定时";
button1.Text = "停止";
bstart = true;
autoevent.Reset();
try
{
request = (HttpWebRequest)WebRequest.Create(@"");
request.CookieContainer = new CookieContainer();
request.Timeout = 1000;
request.ServicePoint.Expect100Continue = false;
response = (HttpWebResponse)request.GetResponse();
cookiecoll = response.Cookies;
response.Close(); rand = GetsRand();
request = (HttpWebRequest)WebRequest.Create(@"");
request.CookieContainer = new CookieContainer();
request.Timeout = 1000;
request.CookieContainer.Add(cookiecoll);
request.Method = "POST";
request.ServicePoint.Expect100Continue = false;
request.AllowAutoRedirect = false;
request.KeepAlive = true;
request.Accept = @"application/x-shockwave-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
request.UserAgent = @"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";
request.Referer = @"";
request.Host = @"";
request.ContentType = @"application/x-www-form-urlencoded";
postMessage = @"";
bdata = coding.GetBytes(postMessage);
request.ContentLength = bdata.Length;
request.GetRequestStream().Write(bdata, 0, bdata.Length);
request.GetRequestStream().Flush();
request.GetRequestStream().Close();
StreamReader readStream = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8);
response.Close();
kongzhi = new Thread(kz);
kongzhi.Start();
}
catch (System.Exception ex)
{
}
}
} private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
iFreq = (int)numericUpDown1.Value;
} private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
} private void Form1_Paint(object sender, PaintEventArgs e)
{
label4.Text = "已刷" + count.ToString() + "次";
} private void Form1_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
this.Hide();
}
} private void timer1_Tick(object sender, EventArgs e)
{
button1_Click(sender, e);
} private void button2_Click(object sender, EventArgs e)
{
if ((isDD) || (bstart))
{
button2.Text = "定时";
isDD = false;
timer1.Stop();
}
else
{
System.DateTime now = System.DateTime.Now;
if (now.CompareTo(dateTimePicker1.Value) > 0)
return;
timer1.Interval = (int)dateTimePicker1.Value.Subtract(now).TotalMilliseconds;
isDD = true;
button2.Text = "停止";
timer1.Start();
}
}
}
}