簡體   English   中英

存儲/使用包含20萬個項目的數組是否可行?

[英]Would it be feasible to store/use an array with 200 thousand items?

我有239個文本文件要在應用程序中處理,此刻文件存儲為資源,當需要讀取文件內容時,我要做的就是將一個資源僅加載到Array中。讀取將Array設置為Nothing的內容,並且在需要讀取其中一個文件時對其他文件執行相同的操作。

如果在加載應用程序時將239個文件的所有文本文件內容加載到Array中會更好嗎? 總共約有200.000個項目計數的數組。

實際上,我認為將來要做的是生成包含所有239個文本文件內容的XML,然后將該XML加載到對象中以管理屬性/屬性,但是目前我還沒有任何XML我想知道如何生成XML或如何正確讀取XML,但是現在就知道是否應該更好地管理200.000行/元素的對象/數組而不是讀取一些文件/ xml。

實際的問題不是多少個項目,而是項目 的總大小是 多少 在具有4 GB或更大容量的系統中,10 MB沒問題,當然,您可以相信系統可以相應地分頁。 最肯定的是,將所有數據加載到數組中將加快對其的操作,並且您將避免不斷調整數組的大小。

因此,我對此事的看法是,如果要減輕磁盤負載並提高處理性能,則最好是裝載所有項目。

即使只有10 MB,為什么還要占用內存。
除非您遇到特定的性能問題,否則不要擴展規模。

對於數組,創建時需要調整大小。
您知道前面的尺寸嗎?

我會同時處理一個文件。
如果每個文件的大小相同,則可以為每個文件重復使用相同的數組。

如果您不知道每個文件的大小,請一次重用一個文件列表,因為它的大小為“容量”,而“清除”不會釋放容量,因此您不會承受調整大小的麻煩。
前端大小將其設置為您期望的最大單個文件大小。

列表容量屬性

我們往往會忘記一件事:Window的出色緩存功能。 如果您只是不關心緩存自己,並且讀取過程相當快(例如,一個slurp ),則可以忽略緩存。

在其他情況下,我建議您使用一個非常容易實現的“ MRU緩存”(MRU =最近使用)。 它們非常有效,並在幾分鍾內實現。

假設您要保留20個最常用的文件。 只需創建一個列表。 該列表將保存每個文件(數組)的內容和文件名。

每次嘗試(重新讀取)文件的內容時,請先在列表中查找。 如果在列表中,請將內容移到列表的最前面,然后返回內容。 如果它不在列表中,請閱讀文件並將其放在列表的最前面。 如果列表現在包含20個以上的元素,則丟棄列表的最后一個元素。

您可以根據需要增加“ 20”,並且在內存中將始終具有前20個最近使用的列表。

這是一些偽代碼:

FileContents ReadFile(filename)
   i = List.IndexOf(filename) 
   if (i == NOTFOUND) 
     content = PhysicallyRead(filename)
   else
     content = List[i];
     List.RemoveItemAt(i);
   end
   List.InsertAt(0, content, filename)
   If List.Length > MAXLENGTH
     List.RemoveItemAt(MAXLENGTH)

希望您能明白。 您唯一需要注意的是列表操作相當快。

通常,使用數據庫代替是最好的方法,尤其是當您必須過濾文件內容,逐行進行計算等等時。 但是,如果速度真的很關鍵,那么內存中的解決方案可能會更好。

但是,如果您想使其保持簡單和可擴展性,請考慮使用嵌入式數據庫解決方案(例如SQLite,Firebird嵌入式,SQL-Server嵌入式),如先前答案所述。

希望這個對你有幫助。

暫無
暫無

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

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