2015-02-05 104 views
1

我使用TCP客戶端連接到Gmail帳戶以閱讀電子郵件。它爲TCP連接返回SslStream。它適用於單線程環境,但在速度方面性能非常差。通過C#中的多線程處理TCP客戶端

我需要優化項目,以便提高速度。我已經實現了多線程,它增加了速度,但應用程序在某些時候會變得不穩定。

使用TCP連接(全局成員)線程安全嗎?

或者我可以創建多個TCP連接並傳遞給線程方法來提高速度嗎?

或者還有其他更好的方法嗎?

TCPClient m_TCPclient 
SslStream sslStream; 

private void createTCP() 
{ 
// creating tcp and sslstream 
} 

private void authenticateUser() 
{ 
// authenticating the user 
} 

private void getUserdata() 
{ 

// iterating folders and its items 
foreach(string emailID in IDList) 
{ 
//Thread implementation 

} 

回答

0

關於線程安全,採取快速瀏覽一下爲TcpClientSslStream文檔:

任何公共靜態(在Visual Basic中共享)此類型的成員是線程安全的。任何實例成員不保證是線程安全的。

我想你可能想要看的是使用流的異步方法來處理執行IO時的掛起。

0

TCPClient和SslStream對象都不是線程安全的。您將不得不添加線程同步以避免競爭條件以避免掛起。但是,您的應用程序速度仍將取決於單個tcp客戶端,它基本上呈現您的多線程在TCP吞吐量方面無用。

讓每個線程都創建自己的連接和流對象。這反過來會增加你的TCP吞吐量,這很可能是你的應用程序的瓶頸。

要同步這些線程以便它們不讀取相同的信息,請讓主線程獲取電子郵件列表並將電子郵件列表的子集傳遞給每個線程,然後使用各自的連接來獲取這些電子郵件。

您也可以使用緩存來避免每次重新啓動應用程序時都獲取相同的信息。