2011-01-25 46 views
0

我有一個flex web應用程序,它從數據庫中檢索一些名稱&地址。項目工作正常,但我想讓它更快。不用爲每個名稱請求調用數據庫,我可以將所有名稱預加載到數組中&在用戶發出請求時過濾數組。在我走下這條路線之前,雖然我想檢查是否可以在數組中使用50,000或100萬個元素的應用程序?什麼是它減慢應用程序的限制? (我預計它會在我的應用中發生很多事情,但爲此我們假設應用只包含這個巨大的數組)。數組對於數組來說有多少數據太多?

回答

1

是的,如果你願意的話,你可能會在數組中填充幾百萬項,並且Flash播放器不會對你大吼。但你真的想要嗎?

如果應用程序在能夠工作之前必須在本地下載整個數據庫,是否需要更長時間才能啓動?如果下載這麼多數據所需的額外時間不是很重要,那麼一些數據庫查詢是否真的值得優化?

如果你有一個很好的用例來做到這一點,你將不得不注意你使用這些數據結構的方式。循環訪問數組以找到一個項目會變得有點慢,所以您需要在本地創建索引,這很可能是通過使用一些哈希結構。您允許搜索查詢的靈活性越高,索引問題就越有趣。

+0

「因此您需要在本地創建索引」...您是什麼意思? –

+0

我的意思是創建使用相關索引作爲鍵並指向數組區域的對象結構。例如,假設您的數組已被適當排序,您可以讓對象具有一個字母鍵,每個鍵指向您的大數組中的第一個索引,該索引具有以該字母開頭的特定字段。通過使用該對象並從與給定字母關聯的位置開始循環遍歷大數組,您將有一種快速查找以該字母開頭的字段的所有記錄的有效方法。你可以想象索引使用整個名稱作爲鍵,等 – Metal

+0

聽起來很有趣..我可以去哪裏找到一個例子? –

2

通過大型數組搜索可能會比必要的慢,特別是如果您談論的是100萬條記錄。

你可以將它分成幾個仍然很大但較小的數組嗎?如果您始終使用帳號進行搜索,請根據第一位數字或兩位數字將其分開。

要直接回答你的問題,純粹的AS3處理一個50,000元素的數組應該沒問題。一旦你超過250,000,我認爲你需要分解它。

顯示許多UI元素雖然不同。如果嘗試將圖表綁定到具有10,000個元素的dataProvider,則太多了。列表或數據網格相同。

但是對於純粹的模型數據,不受ui約束,我建議高達250,000根據我的經驗。

2

如果您加載大量數據(不知道你使用列表雖然),你可以看看詹姆斯病房後如何使用AsyncListView分頁來獲取數據的chuncks作爲其必要的。要儘快嘗試和實施這樣的事情。他的可運行示例使用100,000行,分頁爲100(與HttpService/AMF類型調用一起工作): http://www.jamesward.com/2010/10/11/data-paging-in-flex-4/