2009-06-26 59 views

回答

1

Branden的權利 - 我們編寫的代碼基本上總是發生在主線程上;雖然網絡調用本身確實發生在後臺線程上,但該調用的處理髮生在主線程上。

要記住的一件事是WebService和HTTPService類可能會嘗試自動序列化您的響應,這可能意味着不必要地處理該處理。另一方面,使用URLLoader可以讓您更直接地訪問響應數據,使您能夠更直接地使用它,而不會產生內置處理的不必要開銷。因此,如果你發現你必須處理整個XML文件,你可能會考慮將它分解成多塊,並將這些塊的處理分配到不同的函數中,而不是處理範圍內的所有內容一個功能。只要這樣做可以讓玩家在處理大量文本(處理一下,退出該函數,渲染UI,進入下一個函數,渲染等等)時繼續更新UI; AIR團隊的工程師Oliver Goldman做了presentation on this concept at last year's MAX conference

希望它有幫助!

3

這聽起來像阻塞是由Flash解析XML而不是實際加載引起的。

如果是這樣,那麼你可以繼續加載文件,只是檢查你回來的原始數據的大小 - 如果它更大,解析它,並採取解析命中。否則拋擲數據並等待下一個請求。

目前還沒有明確的方式使用Flash進行線程化。某些任務自然發生異步(想到網絡和pixelbender),但就是這樣。

+0

在Flex應用程序非常大的SOAP響應打交道時,我已經看到了同樣的事情:如果你覺得這個功能足夠的需求上與Adobe此功能增強票

還請投票。 – 2009-06-27 03:31:44

1

像上面提到的那樣,AS3是單線程的。但是有幾種方法可以處理你的情況。這裏有你可能的選擇:

首先,確保在加載時確實需要解析整個XML,並且不能將加載的xml節點保存在內存中作爲數據模型(XML現在是本機數據類型)。有時候,我通過傳遞一個XMLNode來創建值對象,並將其保存在內存中,直到需要讀取節點值爲止。這允許您稍後保留一些解析。

如果您使用的ArrayCollection或類似結構來保存數據,請嘗試使用原始陣列(見http://www.arpitonline.com/blog/?p=114一個問題,我跑進)

看看你是否能創造性地使用使用callLater()(http://livedocs.adobe.com/flex/2/langref/mx/core/UIComponent.html#callLater()

你可以通過像SWX這樣的原生格式將數據傳遞給客戶端嗎?或者使用遠程處理

您可以使用數據分頁嗎?ArrayCollections和我敢肯定XMLCollection支持它

側面說明:

雖然AS3是單線程的,Pixel Bender的,我覺得鍊金術(http://labs.adobe.com/technologies/alchemy/)在不同的線程中運行。在使用Pixel Bender進行計算的博客上進行了一些實驗,這些計算不會減慢應用程序的UI(例如:http://elromdesign.com/blog/2009/02/09/using-pixel-bender-to-do-heavy-lifting-calculations-makes-flash-player-multi-thread/)。 https://bugs.adobe.com/jira/browse/ASC-3222

+0

鍊金術在同一個線程上運行(因爲它只是AS)。然而,LVVM支持它自己的綠色線程模型,它允許你編寫後臺線程 - 但它們是軟件線程,而不是OS線程。 – 2009-06-28 15:03:26

相關問題