簡體   English   中英

腳本在C#,SQL 2008中下載數千個文件的最佳方法

[英]Best approach for script to download thousands of files in C#, SQL 2008

我有一個腳本,該腳本遍歷數據庫表,並為每一行下載一個文件,將其添加到內存中的結果表中,然后在完成后將所有結果批量上傳回數據庫中。

我的問題是可能有成千上萬的文件要下載,腳本可能會中途超時或出錯。

有沒有更好的方法,可能涉及線程或異步調用?

似乎應該采用線程化方法。.您應該有一個或多個線程從db讀取行(如果您想要多個線程,則應該對讀取的行進行分區),然后將它們放入某種並發集合中(或者是)。 net 4個內置程序,或內置/下載自定義程序)。 那么您應該有一個線程集合,該線程集合將從該列表中獲取項目並獲取文件,如果他超時,他應該將任務放回集合中。

這是基本的生產者-消費者線程模式。 您可以輕松地在Google中找到許多示例。

如果超時的原因是要下載的文件數,我建議使用ThreadPool進行異步調用。

首先,使用ThreadPool.SetMaxThreads設置最大並行線程數。 然后,您可以使用ThreadPool.QueueUserWorkItem任務排隊。 這種做法將保證最大並發線程數。 所有超過最大數量的對象將等待,直到池中的線程之一完成。

也許這可能是雲應用程序的不錯選擇。 帶寬,排隊進行異步處理,是否可以及時擴展?

每次下載操作之后是否可以將結果持久化回數據庫? 這樣,您可以比較兩個表的行,以在出現某種超時或錯誤的情況下選擇從上次中斷的地方開始。 線程化可能使其速度更快,但是它無法單獨解決您所問的問題。

如果腳本有很多時間運行(每天午夜運行一次,等等),那么最簡單的解決方案是將每次X下載都保存到數據庫中。

我不會在腳本中執行此類操作。 取而代之的是,我有某種類型的程序,可能是作為Windows服務運行的,實際上將執行下載所有這些文件並更新相關記錄的工作。

如果只能在用戶單擊按鈕時運行它,那么我將讓服務監視一個表以執行命令。 一旦檢測到該命令,便開始並繼續。

不確定這里的模式名稱,但是基本上就像一個工作排隊系統。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM