Перейти к содержанию
Fire Monkey от А до Я

Поиск сообщества

Показаны результаты для 'памяти'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Общие вопросы
    • Анимация
    • Графика
    • Стили
    • Базы данных и REST
    • Компоненты
    • Положение, размеры, выравнивание
    • Работа с текстом
    • Приложение и формы
    • Отладка
    • Развертывание приложений
    • Вопросы по языку Object Pascal и RTL
    • Общая информация о TControl
    • События
    • Прочие вопросы
  • Вопросы по платформам
    • Android
    • iOS
    • OSX
    • Windows
    • Windows Phone
    • Linux
  • Вопросы по использованию RAD Studio
    • Лицензирование
    • Сборка проектов
    • Multi-Device Designer
    • Редактор кода
    • Вопросы
  • Обучение
    • Основная информация
    • Вопросы
    • Отзывы
  • Поиск специалистов по FireMonkey
    • Консультации
    • Ищу подрядчика
  • Дополнительные ресурсы по FireMonkey
    • Сторонние компоненты
    • Приложения, написанные с использованием FireMonkey
    • Примеры
    • Руководства
    • Шаблоны
    • Статьи и заметки
    • Информация о версиях RAD Studio
    • Новости
  • Организация работы данного форума

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


StackOverflow


Защита от ботов


Город


Интересы

  1. Уважаемый Slym, к сожалению предложенный способ результата не дал. Если я правильно понял, условие ThreadPoolStats.IdleWorkerThreadCount<>ThreadPoolStats.WorkerThreadCount является признаком того, что не все таски завершены. При тестировании приложения это условие не выполняется (то есть все такси завершены?), управление передается деструктору главной формы приложения, в котором дается команда на удаление пользовательских объектов. Пользовательские объекты удаляются. Затем выдается сообщение об утечке памяти и приложение закрывается.
  2. antigrav

    Утечка памяти

    Здравствуйте, коллеги. Пишу метод десериализации для считывания данных из файла и создания соответствующего объекта в памяти. Для того, чтобы пользователь не скучал, загружаю данные в отдельном потоке, а в главном запускаю TAniIndicator. Данные считываются, объект создается, AniIndicator работает. Но при попытке завершения приложения получаю утечку памяти (см. рис.). Пользовательские объекты я удаляю перед закрытием приложения, но в памяти остаются системные объекты, в том числе из библиотеки PPL. Сокращенный код метода загрузки данных ниже. С чем может быть связана утечка? Для детектирования утечек использую команду ReportMemoryLeaksOnShutdown := True. Если дополнительный поток не использую, утечек нет. procedure LoadProjectFromFile(AFileName: string); var fut: IFuture<TComponent>; cmp: TComponent; begin AniIndic.Enabled := True; AniIndic.Visible := True; fut := TTask.Future<TComponent>( function: TComponent begin Result := LoadFromFile(AFileName); end ); TTask.Run( procedure begin fut.Start; cmp := fut.Value; {$REGION 'После загрузки в главном потоке'} TThread.Synchronize(nil, procedure begin AniIndic.Enabled := False; AniIndic.Visible := False; if Assigned(cmp) then begin if cmp is TCAMProject then begin fProject := cmp as TCAMProject; // здесь всякие действия if Assigned(OnFinishedLoadProject) then begin OnFinishedLoadProject(nil); end; end end end ) {$ENDREGION} end ); end;
  3. нет никакой технологии, есть набор Bitmap и рисование этих битмап напрямую на Canvas объем памяти ровно такой, что требуется для хранения этих битмапов. скорость отрисовки - максимальная, потому что кроме отрисовки вы собсно ничего не делаете вообще)
  4. Благодарю! Почитаю Решение уважаемого Slym у меня дает 70+ fps без перестановки порядка и 30+ fps с перестановкой при объеме занимаемой памяти 56 МБ на 1000 персонажей Какой выигрыш по fps и памяти вы ожидаете по вашей технологии?
  5. Здравствуйте! Пишу алгоритм с параллельными вычислениями. Один из объектов является разделяемым ресурсом и хотелось бы его клонировать. Объект достаточно сложный и использует другие объекты. Возникла идея применения механизма сериализации/десериализации. Примерный код ниже. function Cloning(RootObject: TComponent): TComponent; var MemStream: TMemoryStream; begin MemStream := TMemoryStream.Create; try MemStream.WriteComponent(RootObject); MemStream.Position := 0; Result := MemStream.ReadComponent(RootObject); finally MemStream.Free; end; end; Данный код, однако, не дает нужного результата. Исходный компонент RootObject и Result, в итоге, ссылаются на одну и ту же область памяти. Может ли уважаемое сообщество предложить какие-то решения?
  6. Собственно суть задачи: есть набор кадров с камеры. Из этого набора кадров необходимо создать видеоролик. Напрямую с камеры писать никак не получится (там свой собственный протокол, кадры приходят по GIGE из внутренней памяти камеры в виде набора данных). Как из этого потока данных собрать кадр и вывести его на форму - вопрос решен. А вот как из этого видеофайл сделать, я не представляю (да плюс еще Win+Linux). Вроде как-то можно через ffmpeg, но тоже ничего пока не нашел. Может кто решал подобную задачу, поделитесь информацией. Буду очень признателен. Спасибо.
  7. Для начала доступ к памяти проверьте if TJBuild_VERSION.JavaClass.SDK_INT >= 30 then begin if TJEnvironment.JavaClass.isExternalStorageManager = false then begin Intent := TJIntent.Create; Intent:= TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('package:').concat(TAndroidHelper.Context.getPackageName))); if intent.resolveActivity(TAndroidHelper.Context.getPackageManager) <> nil then TAndroidHelper.Context.startActivity(Intent); end; end; В <application android:persistent="%persistent%" android:restoreAnyVersion="%restoreAnyVersion%" android:label="%label%" android:debuggable="%debuggable%" android:largeHeap="%largeHeap%" Должна быть строка android:requestLegacyExternalStorage="true"
  8. Olvion

    общая глючность

    не нашел уместного топика для своего вопроса, так что просьба модераторам перенести, если понимаете куда да и вопрос, конечно, слишком общий и неприлично его задавать на тематическом форуме, но: я вот с фаер-манки начал работать совсем недавно, но что пугает - при работе происходят случайные ошибки. то есть, не от моего кода зависящие, а глючные. раз запустилось. потом ругнулось на индекс объекта. потом опять запустилось. потом ругнулось на проблемы перекоса в памяти. то есть ошибки связанные с внутренними глюками видимо синхронизации. ладно при разработке. но когда пошел показывать шефу оно как назло на десять минут два раза глюконуло. кто работает давно - насколько это стабильно? может пока не залез по самые гланды не лезть? я на 10.3 работаю, уменьшаться ли глюки при миграции на скажем 11?
  9. Скорее всего, увеличение размера исходного кода произошло из-за следующих причин: 1. Разница в размере типов PChar и PAnsiChar. В Delphi 2009 и более поздних версиях PChar был заменен на PAnsiChar для совместимости с Unicode. Размер PAnsiChar в 2 раза больше чем PChar. 2. Автоматическая конвертация строковых литералов в Unicode. В новых версиях Delphi строковые литералы имеют тип UnicodeString вместо AnsiString. Это также увеличивает размер. 3. Добавление префиксов перед строковыми литералами. Для совместимости с Unicode Delphi автоматически добавляет префиксы перед строками, например 'U', 'L', etc. Это тоже увеличивает размер кода. 4. Выравнивание данных. Компилятор может добавлять выравнивание в памяти для некоторых типов, например для PAnsiChar. 5. Другие изменения в формате объектного кода. Например, более длинные имена классов/методов. Таким образом, переход на новые версии Delphi с Unicode поддержкой может привести к значительному увеличению размера исходного кода из-за несовместимости строк, упаковки данных и других факторов. Это нормальное явление, цена прогресса.
  10. Когда вы говорите, что приложения на Андроиде весят 400КБ и используют библиотеки Java размером 2ГБ, вы, по-видимому, имеете в виду разницу между размером исполняемого файла приложения и размером всех библиотек, которые оно может использовать во время выполнения. Современные фреймворки, такие как Java для Android или .NET, часто используют большое количество библиотек, которые содержат общий код, используемый многими приложениями. Эти библиотеки обычно устанавливаются один раз и затем используются множеством приложений, поэтому их размер не влияет на размер каждого отдельного приложения. С другой стороны, приложения, созданные с использованием Delphi, обычно компилируются в нативный код и включают в себя все необходимые библиотеки и зависимости. Это может привести к тому, что исполняемые файлы будут больше, чем если бы они использовали общие библиотеки, но они не зависят от установленных библиотек времени выполнения. С точки зрения конечного пользователя, размер приложения часто не является ключевым фактором, особенно с учетом того, что современные устройства имеют большое количество памяти. Однако для разработчиков может быть важно минимизировать размер приложения, чтобы сократить время загрузки и уменьшить использование ресурсов. В итоге, вопрос "маленькие или большие приложения" зависит от контекста и требований конкретного приложения. В некоторых случаях использование общих библиотек может быть выгодно, в других - предпочтительнее иметь самодостаточное приложение с включенными в него всеми необходимыми библиотеками.
  11. вообщем по умолчанию, доступ к памяти запрещен: TJEnvironment.JavaClass.isExternalStorageManager возвращает False Intent.setAction(StringToJString('android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION')); intent.resolveActivity(TAndroidHelper.Context.getPackageManager) возвращает NIL, (no activity found to handle Intent) если вызвать при этом Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_APPLICATION_DETAILS_SETTINGS); то общие настройки приложения открываются нормально. в настройках доступа к памяти есть три пункта. если выбрать просто "разрешить", то if Androidapi.JNI.Support.TJcontent_ContextCompat.JavaClass.checkSelfPermission(TAndroidHelper.Context, TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE) возвращает TJPackageManager.JavaClass.PERMISSION_GRANTED, но при этом приложение видит только стандартные расширения файлов. если выбрать в правах доступа к памяти пункт "разрешить в любом режиме", тогда уже приложению доступны все файлы. почему активити 'android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION' отсутствует пока не пойму. на устройстве андроид 11-й. и проверку наверное делать не на READ_EXTERNAL_STORAGE а на MANAGE_EXTERNAL_STORAGE, но в 11.3 его нет.
  12. Причиной вылета приложения может быть ошибка в коде, которая вызывает неопределенное поведение при выполнении некоторых действий с TMemo. Ошибка может быть связана с попыткой доступа к освобожденной памяти или нарушением границ массива. Чтобы выявить причину ошибки, вы можете использовать отладчик в Delphi, который позволяет исследовать состояние программы во время выполнения и отслеживать переменные, значения и вызовы функций. Если вы не можете использовать отладчик для какой-либо причины, попробуйте добавить в ваш код обработку исключений, чтобы увидеть, какая ошибка возникает и в каком месте. Например, вы можете использовать следующий код: try // код, который может вызвать ошибку except on E: Exception do ShowMessage('Error: ' + E.Message); end; Этот код позволит отлавливать исключения и выводить сообщения об ошибках в приложении. Кроме того, вы можете попробовать использовать инструменты трассировки, такие как Logcat или сторонние инструменты для отслеживания ошибок в приложении на устройстве Android. Они могут помочь вам идентифицировать проблему и выявить причину вылета приложения.
  13. вообщем установка targetSdkVersion в 29 возвращает доступ ко всем файлам. гугл здесь пишет, что достаточно MANAGE_EXTERNAL_STORAGE объявить, но нифига с targetSdk выше 29 не работает. а насчет опции "разрешить чтение памяти в любом режиме" в разрешениях доступа к файлам так и не понял. в некоторых прогах, типа x-plorer, заходишь в права и там три варианта выбора включая этот. как оно у меня раньше было ума не приложу. но при выборе искало все файлы при sdk 32. ну пока придется 29 апи писать. на гитхабе ещё какой то код нашел, но вываливается с ошибкой заколебали вообщем, постоянно что то придумывают с этой безопасностью. костыли какие то приходится придумывать..
  14. что-то в конец запутался. в настройках проэкта в правах включено read external storage. в манифест ещё добавил: android:requestLegacyExternalStorage="true" в проге запрашиваю права: PermissionsService.RequestPermissions( [ JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE), JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE), ], даю разрешение в системе на доступ. далее в проге, через : TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.STORAGE_SERVICE); LVolumes := LStorageManager.getStorageVolumes; получаю UUID флешки нормально. сканирую папки на наличие определенных файлов. и вот тут самое интересное, что система при поиске возвращает файлы только стандартных расширений, типа *.txt. *.mp3 а других файлов как буд-то нет. уже и по старинке через findFirst искал - то же самое. был заметил, что в системе в разрешениях доступа файлов у меня было три пункта и если выбрать "разрешить чтение памяти в любом режиме" то о чудо все файлы при поиске находились. если просто "разрешить во время выполнения" то фиг, только стандартные расширения. как-то обходился этим, но сейчас не пойму: где что менял при сборке, или система обновилась, но теперь этого пункта в системе нет. только два пункта. может есть у кого какие мысли, как всё же добиться что бы при поиске прога получала все имеющиеся файлы ? или если это где-то в сборке влияет на наличие пункта ""разрешить чтение памяти в любом режиме"" уже и на старом api собирал и в деплой и стор конфигурации: нет этого пункта в разрешениях и всё.. помогите плиз, а то уже голова кипит..
  15. вот программа выключилась. что стало с деревом? рассосалось? дерево - тем более нужен класс, хранящий ссылку на детей, скорее всего того же класса TYourClassList все же просто как мычание. умножаете количество элементов на 8 байт, получаете примерный размер массива указателей на объекты плюс к этому прикидываете размер самих объектов, и получаете количество памяти для хранения вашей структуры. ООООчень грубо, но пойдет..
  16. тогда, думаю, вам нужно просто хранить все это богатство в какой-то (локальной?) БД смысла держать это все в памяти вы никакого не обозначили. если нужно что-то найти, достать, обычная схема работы с моделью данных, сам список моделей обычно хранится в TYourClassList = TObjectList<TYourClass> при необходимости загружаем туда, работаем, выгружаем оттуда при этом выгрузка/загрузка становится независимой от хранения - хоть из интернета скачивайте
  17. а есть какие-то подробности? для чего этот список? и что значит "большой" ? 10 тыс и 10 млн оба немаленькие, но есть нюанс опять же, есть ли необходимость искать элементы в нем? или нужно ли чтобы они были упорядочены? это все важно есть также сомнение, что действительно нужен одномоментно в памяти *действительно* большой кусок данных
  18. Добрый день уважаемые эксперты. Помогите разобраться с функцией TThread.ForceQueue Пришлось внедрить ее как костыль в IOS для показа модальных форм, и получаем кучу ошибок на очистке памяти. Подскажите кто и как правильно ее использует в работе. Ниже рабочий код который гарантированно приведет к ошибке и у нас таких более 100 мест в проекте. FFrom := TFrom.Create(nil); TThread.ForceQueue(nil, procedure begin FFrom.ShowModal(procedure(Res: TModalResult) begin FreeForm(FFrom); //--> и тут получаем кучу ошибок - как правило на Form.Hide почемуто end); end);
  19. Перепробывал обе версии с кейгеном и триал ключом. на WIN 7, 8, 10. Результат одинаково стабильный. Ситуация следующая. загружаю проект IDE показывает такую картинку - 01 все нормально и все видно. после F9 показывает картинку - 02 тока приложение - экран отадки пуст. закрываем приложение - картинка - 03 видно только структуру и инспектор обьектов. техника - кастрированый системмник - ноутбук. CPU - i5, mem - 8G, Video -gtx740m. вопрос это так задумано разработчиками в целях повышения умственных способностей и памяти. или я чтото не так инсталю.
  20. Для доступа к памяти вам нужно запросить необходимые разрешения в реальном времени, на форуме куча примеров
  21. Я не знаю но думаю так по памяти, в AndroidManifest.template: targetSdk=30.
  22. Приветствую! Надеюсь, этот форум еще живой)) Вопрос такой: пока не увидел альтернативу воспроизведения звука, кроме как вызвать MediaPlayer.FileName := ... Мне в своем приложении хотелось бы загрузить необходимые мне аудиофайлы в память, а потом подставлять плееру handler или указатель на аудиоданные, словом, как это должно выглядеть логично и по-человечески. Ведь присвоение FileName, наверно, так и делает, но я бы хотел контролировать этот процесс сам. Еще вот на соседней ветке видел, что частый вызов MediaPlayer.FileName := засоряет память и ее не очистишь. Это действительно так?
  23. Добрый день! Делаю кроссплатформенное приложение. В TBitmap в памяти "рисую" картинку, затем передаю ее на TImage через TCanvas: with Image1.Bitmap.Canvas do begin BeginScene; DRect := TRectF.Create(0, 0, MonsterBitmap.Width - 1, MonsterBitmap.Height - 1); DrawBitmap(MonsterBitmap, DRect, DRect, 1, true); EndScene; end; В Windows-приложении все нормально, области рисования заполняются четко как положено, без всякого масштабирования. А вот в Android-приложении на моем телефоне картинка почему-то растягивается в три раза! А на телефоне жены - в два раза! В чем подвох, где нужно отключить паразитное масштабирование?
  24. Кнопки не проблема, Скачал просто ,искал по запросу кнопки png (pngwing.com по памяти) А как сделать TButton в таком виде ,? Информации 0.1 % Все оказалось просто. kalkulator.zip
  25. Подскажите, пожалуйста, не будет ли утечки памяти, если пользователь несколько раз подряд нажмёт кнопку воспроизведения?
×
×
  • Создать...