2012-07-31 58 views
0

我想通過打開一次FTP連接來優化性能。可以嗎?FTP連接性能java

我做的,

public void method1() 
{ 
    for(loop) 
    { 
    List li = someList; 
    method2(li); //Here I am calling this method in loop. This method has code for FTP connection. So for every iteration it is opening FTP connection in method2(). 
    } 
} 

public void method2(List li) 
{ 
open FTP connection // FTP connect code here 
once FTP connection obtained ....do some other stuff... 
} 

感謝。

回答

0

您可以使用一次創建的靜態(或確實實例)變量;

private static FTPConnection myFTPCon = openFTPConnection(); 

private static FTPConnection openFTPConnection() 
{ 
    //open ftp connection here and return it 
} 

public void method1() 
{ 
    for(loop) 
    { 
     List li = someList; 
     method2(li); 
    } 
} 

public synchronized void method2(List li) 
{ 
    //use myFTPCon here 
} 

編輯迴應評論

public class MyFTPClass { 

    private FTPConnection myFTPCon; 

    public MyFTPClass(String host, String user, String password) { 
     //connect to the ftp server and assign a value to myFTPCon 
    } 

    public synchronized void method() { 
     //use the myFTPCon object here 
    } 
} 

你會再構造從你的主要程序流程MyFTPClass對象,並從那裏使用它。每個新的MyFTPClass實例引用不同的FTP服務器連接,因此您可以擁有儘可能多的所需。

+0

謝謝lynks。但是,當連接到FTP位置時,我必須提供一些文件名,它將存儲在FTP位置,如URL url = new URL(「ftp://」+ userName +「:」+ password +「@」+ hostName +「/ 「+ fileName +」; type = i「); //這裏是fileName。這對我來說每次都是動態的。那麼我如何才能在method2中的myFTPCon變量中獲得動態值? – user1565699 2012-07-31 14:48:34

+0

看到我的編輯,新的代碼可以坐在它自己的源文件MyFTPClass.java中,並且可以在它旁邊運行程序。 – lynks 2012-07-31 14:55:04

+0

再次感謝lynks。 – user1565699 2012-07-31 15:46:52

0

你不解釋我們想要做什麼優化。 你想重用連接嗎?不可能以多線程方式使用連接(假設在文件傳輸時發送流命令:這是不可能的)。

唯一的優化是保持連接在2組命令之間打開(避免關閉和重新打開連接的代價,這非常昂貴)。

對靜態內容要非常小心:在多線程環境(例如應用程序服務器)中進行問題時通常會發生。