你不應該設計什麼,必須有成千上萬的東西在存儲器中的一次。卸載的東西,而你不需要它。你知道10萬是多少?取一個字節並乘以100,000就可以得到一個MB。對於記錄中的每1個字節的數據,您將生成1MB的內存。記錄100,000個整數需要4MB。
如果您的記錄有2個20字符串(第一個和最後一個名字),一個字符串的字符表示有8個字節,所以你剛纔填的內存640 MB的無非就是姓和名以上。大多數'壞'電腦都有,2GB的內存?好工作佔了1/4。即使您設法將這種截斷方式截斷爲ByteArray級別,但超級超級bitshifing,您仍然在談論減少數據的8倍。因此,現在您只有80MB的名字和姓氏,而沒有其他數據。你可以在那裏生存 - 除非我懷疑你的記錄有更多的數據,然後2個字符串。 20個字符串?你正在吃800MB的數據。一次只能卸載100條記錄,而對於這些名稱,則只有640KB的內存。是的,您可以在排序時加載和卸載。
內存塊不會複製比字節快。全部都是一樣。由於切換引用/指針/一個32位/ 64位數字而不是複製內存塊,因此對象的矢量表達式的原因是切換的原因。
目前尚不清楚您正在排序的內容。字節只能達到256的值,因此對於每條記錄顯然你使用的字節數多於1。你想要評估每一組......,比如2000+字節對2000+字節的每一組?像「啊,姓氏是字節32-83,所以提取這些字節,對於每個4字節組,將它們分別移位0,8,16,32位,將它們加在一起,將它們的整數值合併爲一個String,do比較,現在將字節84-124與下一個選項中的字節進行比較,現在將字節0-2000傳送到位置443530-441530,並且......這些記錄是否具有可變長度的字符串或數組?
Flash不是在彙編中寫入的地方!
使用對象並測試內存消耗速度&。如果任何一方都讓你哭泣,那就用更傳統的減輕負荷的方法;如將材料臨時卸載到文本文件中。你應該得到的最醜的是通過將每個單獨的屬性存儲在不同的Vector中來避免對象。矢量等,並且具有相同的索引是指全部記錄中的一個記錄。
缺點是實際的對象會比將原始數據存儲在ByteArray中佔用更多的空間。我需要在內存中保留數千(甚至數百)萬條記錄。 – Eduardo
那麼,創建一個只包含公共變量的類,它將具有最小的開銷。我希望你會失去很多時間,試圖讓自己成爲一個ByteArray並將其快速排序,並通過索引檢索一段數據並將其設置回來。實際上,這樣的函數將包含遍歷到計算的位置,然後調用一個'readObject()'來檢索一條記錄,然後返回,每次(!)它都會嘗試一個類型強制。我猜它會比'Vector.sort()'慢很多,只節省8MB內存。 – Vesper
是的,8MB意味着你有兩個地方爲1M個對象存儲4個字節的鏈接,一個在Vector中,另一個在所謂的「開銷」中,每個對象中都有一個Class類型的鏈接。將它與2-3個實例的記錄類,一個ByteArray以及一次強制調用相比較。另外,我不確定寫入ByteArray的數據是否等於字段大小的總和,可能會在其中寫入一些開銷信息,這表示該對象。即使如此,您記錄中的單個字符串也會讓您大失所望,因爲您無法快速獲取索引。 – Vesper