2012-03-13 63 views
4

我的需求是從.net應用程序上傳4GB文件並從.net應用程序下載相同的文件。我們可以使用.net應用程序上傳和下載4GB文件。從.net應用程序下載4GB文件

因此,要上傳4GB文件,我們拆分了4GB文件,並在下載時使用C#中的FileStream對象合併文件。

現在我可以將文件保存在客戶端機器上,當我點擊我的.net應用程序中的下載按鈕時。但保存文件流對象時寫入字節字節並將文件保存到用戶的機器。它需要更多時間將文件保存到客戶端機器。即使是100MB文件,它也需要保存大約2小時。因此,如果我節省了4GB,則需要很長時間。

提高速度的最佳方法是什麼? 有沒有Filestream對象可用? 請幫助我使用.net應用程序從Networkshare下載4GB文件。 如果你發現任何其他的解決方案也上傳並下載.net的4GB文件,這將是很好的。

我無法使用asp.net下載代碼來下載4GB文件。所以我們遵循分裂的方法。 請幫我提高下面代碼的速度。我正在使用Asp .net 3.5應用程序。

我的代碼,而上傳:

    FileStream foption = new FileStream(strFileName, FileMode.Open); 
        len = foption.Length; 
        eachSize = (int)Math.Ceiling((double)len/x); 
        foption.Close(); 
        FileStream inFile = new FileStream(strFileName, FileMode.OpenOrCreate, FileAccess.Read); 
        for (int i = 0; i < x; i++) 
        { 
         FileStream outFile = new FileStream(strDir + "\\" + i + ".zip", FileMode.OpenOrCreate, FileAccess.Write); 
         int data = 0; 
         byte[] buffer = new byte[eachSize]; 
         if ((data = inFile.Read(buffer, 0, eachSize)) > 0) 
         { 
          outFile.Write(buffer, 0, data); 
         } 
         outFile.Close(); 
        } 

我的代碼,同時下載

FileStream outFile = new FileStream("\\\\" + clientIPAddress + "\\upload\\output.zip", FileMode.OpenOrCreate, FileAccess.Write); 
      for (int i = 0; i < 10; i++) 
      { 
       int data = 0; 
       byte[] buffer = new byte[4096]; 
       FileStream inFile = new FileStream(strMediaPath + "\\" + i + ".zip", FileMode.OpenOrCreate, FileAccess.Read); 
       while ((data = inFile.Read(buffer, 0, 4096)) > 0) 
       { 
        outFile.Write(buffer, 0, data); 
       } 
       inFile.Close(); 
      } 
      outFile.Close(); 

感謝 埃德溫

回答

1

我沒有看到擺在首位分割文件的點,你所做的只是保證在傳輸結束時進行另一個慢速磁盤複製操作來連接文件。

不拆分文件將要求在第一個代碼塊中的ilong而不是int。自簽名以來,32位整數將以2GB的分辨率出來。

最後,你的緩衝區應該是一大點。 4k是我的第一臺TRS-80電腦,它是一個微小的數據塊在循環內讀寫。嘗試一些更重要的東西,比如1MB。

+1

兩種捕獲都非常出色;我在我的機器上的_hot cache_上運行了一些快速和骯髒的測試,發現128kb速度稍快,但速度僅比4kb快1.4倍。冷藏緩存將有所不同,但目前這超出了我的興趣水平。 :) – sarnold 2012-03-13 22:54:23

相關問題