我開發在Windows Server上使用C#和.NET 3.5 2008年什麼是C#中的最佳多線程技術
中的TcpListener任務是跑了很多的TcpListener任務 的應用程序:
- 聽 獲得一個XML消息
- 從中讀出一個ID
- 基於ID到發送命令到 特定攝像機拍攝快照,並將其存儲在一個文件夾
這是爲了在1秒內執行,所以我可以採取與照相機快照。我使用以下代碼執行此任務有一段延遲:
private Thread listen_thread;
public void start_listen()
{
this.listen_thread = new Thread(new ThreadStart(save_data));
this.listen_thread.Priority = ThreadPriority.Normal;
this.listen_thread.Start();
}
private void save_data()
{
//work to be done
}
這是最好的多線程技術嗎?該應用程序在運行在Dell PowerEdge 2900 2四核prosessor,我認爲這可能走得更快。我該如何能夠改善此代碼的延遲?
那代碼爲的TcpListener
Int32 port = controller_port;
try
{
//this server ip
IPAddress localAddr = IPAddress.Parse(this_ip);
server = new TcpListener(localAddr, port);
server.Start();
Byte[] bytes = new Byte[256];
String data = null;
while (true)
{
Console.Write("Waiting for a connection... ");
TcpClient client = server.AcceptTcpClient();
Console.Write("Connected!");
data = null;
NetworkStream stream = client.GetStream();
int i;
string add_data = "";
Console.Write("Waiting...!");
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
try
{
string full_row = "";
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
Console.Write("Received from controller: " + data);
add_data += data;
}
catch{}
}
}
}
然後我把它拿到ID。
哪裏是你的'TcpListener'代碼? – 2011-03-27 14:34:49
您的應用程序CPU綁定或I/O綁定?你有很多併發訪問,或一次只有一個訪問? – 2011-03-27 14:36:19
顯示並不能幫助我們明白什麼重要的代碼...我認爲TCP代碼(或網絡流碼,或插座碼;等等)將是這裏重要的... – 2011-03-27 14:39:25