2011-02-14 54 views
1

我一直在試圖追蹤我們的應用程序中的內存泄漏,並繼續發現自己回望Spark元件作爲罪魁禍首。火花內存泄漏

我想我已經找到了原因,但是我對垃圾收集的理解/ mark &不是太熱,所以我想驗證我的發現。

Spark中的許多類使用RichEditableText來顯示其文本屬性(ComboBox,TextInput)。

RichEditableText有一個本地textContainerManager屬性,並經常在這個電話compose()

下面是TextContainerManager

// Line 282 - 292: 
    static private var stringFactoryDictionary:Dictionary = new Dictionary(true); 
    static private function inputManagerStringFactory(config:IConfiguration):StringTextLineFactory 
    { 
     var factory:StringTextLineFactory = stringFactoryDictionary[config]; 
     if (factory == null) 
     { 
      factory = new StringTextLineFactory(config); 
      stringFactoryDictionary[config] = factory; 
     } 
     return factory; 
    } 
// Line 1204: 
public function compose() { 
    // Line 1238: 
    var inputManagerFactory:TextLineFactoryBase = (_sourceState == SOURCE_STRING) ? inputManagerStringFactory(_config) : _inputManagerTextFlowFactory; 
    // Line 1242: 
    inputManagerFactory.swfContext = Configuration.playerEnablesArgoFeatures ? this : _swfContext; 
} 

行相關刪節提取物1242是關鍵的線在這裏,因爲它提供了靜態字典給我們組件的引用。 (注意 - 我已經用調試器檢查了這一點,以確認三元組的哪個分支被執行。)這將阻止實例被垃圾收集。

例如:靜態字典有一個引用實例的值 - 實例不能是GC'd。

反過來,這將防止任何其他引用TextContainerManager實例的實例也被GC'd。

儘管這個理論與我在應用中看到的一致,但我不能相信在這樣的低級別spark組件中確實存在內存泄漏。

有人可以請說明這一點嗎?

順便說一句 - 我已經開了bugs.adobe.com缺陷跟蹤這個問題,它應該被證明是一個真正的錯誤: https://bugs.adobe.com/jira/browse/SDK-29531

+0

票你diff'd 4.1和4.5之間TextLayoutManager,看看有什麼變化了? – 2011-02-18 17:14:37

回答

0

我聽說有相關的TLF幾個內存問題。 這應該在Flex 4.5 SDK中糾正。

在此期間,你仍然可以打開http://bugs.adobe.com/jira/

+0

已經打開一個(對不起,應該在帖子中提到這個!) – 2011-02-14 17:56:02