我需要寫在C#代碼將從數據表中選擇文件名列表,這是不此列表中的文件夾中刪除所有文件。刪除不在數據表中的文件的最快方法?
一種可能性是按名稱排序,然後遍歷我的表結果,對於每個結果循環遍歷我的文件並刪除它們,直到找到與當前結果相匹配的文件或字母更大,然後移動到下一個結果而不重置當前文件索引。
我還沒有試過真正實現這一點,但在我看來,這將是一個爲O(n),因爲每個列表將通過被環只有一次(忽略排序兩個列表部分)。我不知道的唯一情況是我能否100%確定文件系統和數據庫引擎的排序方式完全相同(他們都認爲「_」小於「 - 」之類的東西)。如果不是,上面的算法根本不起作用。 (順便說一下,這是一個Jet引擎數據庫。)
但由於這可能不是這樣的罕見問題你們可能已經知道一個更好的解決方案。我試圖搜索網頁,但找不到任何東西。也許更有效的解決方案是將每個列表放入一個HashSet並找出它們的區別。
我正準備寫一個非常類似的解決方案,但使用'HashSet.ExceptWith'代替。我不確定'IEnumerable.Except'和'HashSet.ExceptWith'一樣快。另一方面,你的代碼不涉及填充'HashSet'。 – Juan
如果你想要刪除很多文件(比如很多文件!),hashset方式可能會更有效率,但這只是推測。我其實認爲「刪除」操作將成爲瓶頸。即使你使用多線程,硬件也會是我想的限制。 – Tipx