我在寫一個C#類庫,使用一個IStream通過COM自動傳輸大量數據。它使用CreateStreamOnHGlobal API調用來創建流,並使用System.Runtime.InteropServices.COMTypes.IStream中的方法來處理它。管理大型IStreams的正確方法是什麼?
我的問題是,在傳輸大量數據時,保持內存佔用空間的最佳方法是什麼?將100MB以上的文件數據加載到內存中似乎很浪費,而且客戶端應用程序需要等到該過程完成才能下載任何內容。
我的計劃是創建一個合理大小的流並多次寫入。在寫入下一個數據塊之前,請從頭開始重新開始並重寫。我是否以正確的方式開展工作,有沒有更好的方法來解決這個問題?
哪裏的數據從何而來?將所有內容都存儲在內存中是很少見的。你當然可以在Read()方法的實現中簡單地讀取它? – 2010-06-21 16:19:38
從各種來源,包括數據庫表和文本文件。庫代碼將數據解析爲一個字節數組並將其傳輸到流中。我可以寫小塊讀/寫,這不是問題。問題是,隨着我一直寫到流的盡頭,它會不斷增長,對吧? – polara 2010-06-21 16:29:36
您可能最好編寫自己的實現IStream接口的類,然後您可以處理對Read方法的調用並根據需要加載數據,一旦它被讀取,不需要再維護該數據(假設您不允許IStream是可尋求的)。 – tyranid 2011-01-15 12:30:42