Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Страшная прожорливость Flex 4 
:(
    Опции темы
ANTON_AL
Дата 1.11.2009, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



Есть очень серьёзная проблема с Adobe AIR приложением.

В списке отображается ~1000 иконок, размером 32x32.
До загрузки иконок, приложение потребляет 31 Мб оперативной памяти.
После загрузки и отображения, потребляется уже 241 Мб памяти.

Код программы
Код

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/halo">
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;
            import flash.filesystem.File;
            
            
            //
            // 
            //
            var imagesFolder = "data";
            [Bindable] var images: ArrayCollection = new ArrayCollection;
            
            
            //
            // 
            //
            function LoadImages( )
            {
                /*
                    В этом случае, потребляется 70 Мб.
                */
                var folder: File = File.applicationDirectory.resolvePath( this.imagesFolder );
                                
                /*
                    Если папка с иконками находится в другом месте, то кушается уже 250 Мб !!!
                */
                //var folder: File = File.applicationDirectory.resolvePath( "C:/temp" );
                
                if ( folder.isDirectory )
                {
                    var files: Array = folder.getDirectoryListing( );
                    for each( var file: File in files )
                        if ( ! file.isDirectory && file.extension == "jpeg" || file.extension == "jpg" || file.extension == "png" )
                                this.images.addItem( file.url );
                }
            }
        ]]>
    </fx:Script>
    
    
    <s:VGroup width="100%" height="100%">
        
        <s:Button label="load images" click="{LoadImages()}" />
        <s:List dataProvider="{images}" width="100%" height="100%" useVirtualLayout="false">
            <s:layout>
                <s:TileLayout columnWidth="72" rowHeight="72" />
            </s:layout>
            <s:itemRenderer>
                <fx:Component>
                    <s:ItemRenderer>
                        <!--States must be included obligatory, because they are inside of List control, that needs this states-->
                        <s:states>
                            <s:State name="normal" />
                            <s:State name="hovered" />
                            <s:State name="selected" />
                        </s:states>
                        
                        <mx:Image source="{data}" width="100%" height="100%" />
                    </s:ItemRenderer>
                </fx:Component>
            </s:itemRenderer>
        </s:List>
        
    </s:VGroup>
</s:WindowedApplication>


Проект с тестовыми иконками выложил на iFolder  (Project -> Clean, затем - Run)


Причём, заметил такой парадокс:
   Если папка с иконками находится в bin-debug, т.е. в той же папке, что и приложение, то потребляется 70 Мб.
   Если папка с иконками находится в другом месте, скажем - C:/temp, то потребляется 250 Мб.
Если посчитать, сколько будут занимать данные пикселей RGBA для 1000 иконок, размером 32x32, то получим
   32x32x4x1000 = 4 Мб

useVirtualLayout мне необходимо отключить, чтобы при прокрутке, пользователь не видел, как подгружаются иконка

Честно говоря, такому поведению у меня объяснения пока нет...

Есть идеи, как с этим бороться ?


Это сообщение отредактировал(а) ANTON_AL - 1.11.2009, 13:30
PM MAIL   Вверх
SoWa
Дата 1.11.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



Объяснение может быть в файловой системе... Я так думаю, что создание ссылок на далеко лежащие файлы итп...


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
ANTON_AL
Дата 1.11.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



Интересно, какие же ссылки должны быть ?

Даже если все иконки продублировать 2 раза, то будет 16 Мб для того, чтобы держать всё в оперативной памяти. Но 250 - это что-то невообразимое...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Flex | Следующая тема »


 




[ Время генерации скрипта: 0.0411 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.