Перейти к содержанию
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 у меня дает 70+ fps без перестановки порядка и 30+ fps с перестановкой при объеме занимаемой памяти 56 МБ на 1000 персонажей Какой выигрыш по fps и памяти вы ожидаете по вашей технологии?
  2. нет никакой технологии, есть набор Bitmap и рисование этих битмап напрямую на Canvas объем памяти ровно такой, что требуется для хранения этих битмапов. скорость отрисовки - максимальная, потому что кроме отрисовки вы собсно ничего не делаете вообще)
  3. Здравствуйте, форумчане! Переношу приложение из Delphi 10.3 в Delphi 10.4.2 для возможности его работы на телефонах с Android 11. Столкнулся с проблемой - метод класса TDirectory.GetFiles(System.IOUtils.TPath.GetSharedDownloadsPath, '*TASK*.*' ) не находит файлы, которые находятся в памяти телефона в папке Download (под управлением Android 11), в телефоне под управлением Android 8 файлы находятся без проблем! System.IOUtils.TPath.GetSharedDownloadsPath возвращает в обоих случаях путь "/storage/emulated/0/Download". Что нужно исправить в коде программы, что бы под Android 11 файлы было видно? С уважением, Владимир
  4. Здравствуйте! Пишу алгоритм с параллельными вычислениями. Один из объектов является разделяемым ресурсом и хотелось бы его клонировать. Объект достаточно сложный и использует другие объекты. Возникла идея применения механизма сериализации/десериализации. Примерный код ниже. 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, в итоге, ссылаются на одну и ту же область памяти. Может ли уважаемое сообщество предложить какие-то решения?
  5. Собственно суть задачи: есть набор кадров с камеры. Из этого набора кадров необходимо создать видеоролик. Напрямую с камеры писать никак не получится (там свой собственный протокол, кадры приходят по GIGE из внутренней памяти камеры в виде набора данных). Как из этого потока данных собрать кадр и вывести его на форму - вопрос решен. А вот как из этого видеофайл сделать, я не представляю (да плюс еще Win+Linux). Вроде как-то можно через ffmpeg, но тоже ничего пока не нашел. Может кто решал подобную задачу, поделитесь информацией. Буду очень признателен. Спасибо.
  6. Для начала доступ к памяти проверьте 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"
  7. Приветствую! Надеюсь, этот форум еще живой)) Вопрос такой: пока не увидел альтернативу воспроизведения звука, кроме как вызвать MediaPlayer.FileName := ... Мне в своем приложении хотелось бы загрузить необходимые мне аудиофайлы в память, а потом подставлять плееру handler или указатель на аудиоданные, словом, как это должно выглядеть логично и по-человечески. Ведь присвоение FileName, наверно, так и делает, но я бы хотел контролировать этот процесс сам. Еще вот на соседней ветке видел, что частый вызов MediaPlayer.FileName := засоряет память и ее не очистишь. Это действительно так?
  8. Olvion

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

    не нашел уместного топика для своего вопроса, так что просьба модераторам перенести, если понимаете куда да и вопрос, конечно, слишком общий и неприлично его задавать на тематическом форуме, но: я вот с фаер-манки начал работать совсем недавно, но что пугает - при работе происходят случайные ошибки. то есть, не от моего кода зависящие, а глючные. раз запустилось. потом ругнулось на индекс объекта. потом опять запустилось. потом ругнулось на проблемы перекоса в памяти. то есть ошибки связанные с внутренними глюками видимо синхронизации. ладно при разработке. но когда пошел показывать шефу оно как назло на десять минут два раза глюконуло. кто работает давно - насколько это стабильно? может пока не залез по самые гланды не лезть? я на 10.3 работаю, уменьшаться ли глюки при миграции на скажем 11?
  9. Добрый день! Вопрос собственно из названия темы, прошу уточнить как сделать чтобы приложение на FireMonkey для Android не закрывалось когда выходишь на рабочий стол?
  10. что-то в конец запутался. в настройках проэкта в правах включено 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 собирал и в деплой и стор конфигурации: нет этого пункта в разрешениях и всё.. помогите плиз, а то уже голова кипит..
  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. Я использую TMediaPlayer для воспроизведения видео по кругу и плюс в таймере необходим запуск разных видео файлов по расписанию. Выяснилось следующее - если использовать для запуска нового файла такой код, то периодически программа вываливается из памяти: //в таймере запуск видео с другим именем MediaPlayer1->Stop(); MediaPlayer1->FileName = name; //другой файл MediaPlayer1->Play(); А если запускать новый файл в TMediaPlayer так, то вроде работает и программа не вываливается: //в таймере запуск видео с другим именем MediaPlayer1->Stop(); MediaPlayer1->Clear();//вроде помогло, но надежно ли? MediaPlayer1->FileName = name; MediaPlayer1->Play(); Достаточно ли строки MediaPlayer1->Clear(); чтобы предотвратить возможное вываливание программы из памяти в будущем?
  13. Скорее всего, увеличение размера исходного кода произошло из-за следующих причин: 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 поддержкой может привести к значительному увеличению размера исходного кода из-за несовместимости строк, упаковки данных и других факторов. Это нормальное явление, цена прогресса.
  14. Реализую пуш нотификацию с помощью Firebase Cloud Messaging, как показано в примере http://thundaxsoftware.blogspot.com/2017/01/firebase-cloud-messaging-with-delphi.html Отсылаю пуш с помощью консоли Firebase. Если приложение активно, то срабатывает обработчик OnReceiveNotificationEvent. И там мы делаем, что нам надо. Если же приложение свёрнуто или выгружено из памяти, то приходит нотификация. Но текст и заголовок не тот, который я отправляю. В качестве этих параметров в нотификации - имя приложения. А как мне в нотификации получить тот текст и заголовок, который я хочу, если приложение выгружено?
  15. Когда вы говорите, что приложения на Андроиде весят 400КБ и используют библиотеки Java размером 2ГБ, вы, по-видимому, имеете в виду разницу между размером исполняемого файла приложения и размером всех библиотек, которые оно может использовать во время выполнения. Современные фреймворки, такие как Java для Android или .NET, часто используют большое количество библиотек, которые содержат общий код, используемый многими приложениями. Эти библиотеки обычно устанавливаются один раз и затем используются множеством приложений, поэтому их размер не влияет на размер каждого отдельного приложения. С другой стороны, приложения, созданные с использованием Delphi, обычно компилируются в нативный код и включают в себя все необходимые библиотеки и зависимости. Это может привести к тому, что исполняемые файлы будут больше, чем если бы они использовали общие библиотеки, но они не зависят от установленных библиотек времени выполнения. С точки зрения конечного пользователя, размер приложения часто не является ключевым фактором, особенно с учетом того, что современные устройства имеют большое количество памяти. Однако для разработчиков может быть важно минимизировать размер приложения, чтобы сократить время загрузки и уменьшить использование ресурсов. В итоге, вопрос "маленькие или большие приложения" зависит от контекста и требований конкретного приложения. В некоторых случаях использование общих библиотек может быть выгодно, в других - предпочтительнее иметь самодостаточное приложение с включенными в него всеми необходимыми библиотеками.
  16. Нужно ли освобождать память после создания ячеек в TListViewItem. Вот код создания: TListViewItem *Item = ListView1->Items->Add(); Item->Text = "123";
  17. Версия: Delphi XE 10.2.3. Имеется метод: procedure TNotificationStation.Notify(Caption: string; TextMsg: string); var NotificationCenter: TNotificationCenter; Notification: TNotification; begin // Win8 and newest if not TOSVersion.Check(6, 2) then MessageBox(0, PWideChar(TextMsg), PWideChar(Caption), MB_OK) else begin NotificationCenter := TNotificationCenter.Create(nil); try try Notification := NotificationCenter.CreateNotification; Notification.Name := 'TestPush'; Notification.Title := Caption; Notification.AlertBody := TextMsg; NotificationCenter.PresentNotification(Notification); finally FreeAndNil(Notification); end; finally FreeAndNil(NotificationCenter); end; end; end; Чем больше пуш-сообщений вызывается, тем больше приложение начинает есть память. Один посланный пуш -> + ~100 кб. Проблема на Windows, платформы x64 и x86. Совсем не ощущается, что память высвобождается после отправленного пуша. Собственно, куда уходит память? В папке с Samples лежит проект: \Samples\CPP\VCL\Windows 10 Notifications Если понажимать на кнопку Show, ситуация такая же.
  18. Всем добрый день! Написал я тут для своих нужд на Делфи оболочку для работы с SDK для камер PSEye. Примеры были на C++ и С#. Почти все работает, подключает несколько камер, 60fps при VGA-разрешении выдает влёгкую. Но реализацию пришлось делать через VCL.Graphics.TBitmap, а не через фаирманковский. Отчего VCL проект работает шустрее, чем FMX. Данные с камеры я получаю в виде области памяти, имею указатель на начало и размер области (массив Byte, грубо говоря). В VCL получение битмапа реализовал через WinAPI функцию GetDIBits, создав предварительно свой заголовок (TBITMAPINFOHEADER). Хотелось бы узнать, можно ли в FMX как-то напрямую работать с памятью, занимаемой изображением? Где почитать про структуру FMX.Graphics.TBitmap?
  19. Здраствуйте. В программе я заполняю Tgrid изображениями из Imagelist по имени фото который есть в ячейке . Код : if column.index = 8 then //Загрузка картинок. if not value.IsEmpty then begin column.BeginUpdate; i:=StrToInt(maingr.Cells[column.Index,row]); imageindex:=main_form.ImageList1.Source.IndexOf(IntToStr(i)); column.Canvas.Clear(RowColor.Color); main_form.ImageList1.draw(column.Canvas,bounds,imageindex,100); column.EndUpdate; end; Если я уберу очистку канвы то изображения накладуються. А так как есть следующий раз при вызове DrawColumnCell изображение остается только в последней записи. Но такой код в процедуре SelectCell нормально отображает изображение. На каждый вызов. Даже если изображение в ячейке нету. if acol = 8 then begin i:=maingr.Cells[Acol,Arow]; imageindex:=main_form.ImageList1.Source.IndexOf(i); imageviewer1.Bitmap.Clear(TAlphaColors.Null); imageviewer1.Bitmap:=main_form.ImageList1.Bitmap(size,imageindex); end; И по поводу памяти. Как я понял, после того как я присвою изображение ячейке, оно загружается в память. Также когда отображается в ImageViewer. Но после удаления строки с изображениям, память остается занята для уже использованных изображений. То есть при повторном показе память больше не занимается и используется изображение которое было ранее загружено. Думаю это нормальное поведение. Так увеличивается скорость работы программы. Но я собираюсь показывать до 50 фотографий одновременно (средний размер 1мб) из 5-10 тисяч. И мне нужно чтоб после использования изображений память очищалась, иначе программа будет кушать под 10гб оперативной памяти.
  20. Причиной вылета приложения может быть ошибка в коде, которая вызывает неопределенное поведение при выполнении некоторых действий с TMemo. Ошибка может быть связана с попыткой доступа к освобожденной памяти или нарушением границ массива. Чтобы выявить причину ошибки, вы можете использовать отладчик в Delphi, который позволяет исследовать состояние программы во время выполнения и отслеживать переменные, значения и вызовы функций. Если вы не можете использовать отладчик для какой-либо причины, попробуйте добавить в ваш код обработку исключений, чтобы увидеть, какая ошибка возникает и в каком месте. Например, вы можете использовать следующий код: try // код, который может вызвать ошибку except on E: Exception do ShowMessage('Error: ' + E.Message); end; Этот код позволит отлавливать исключения и выводить сообщения об ошибках в приложении. Кроме того, вы можете попробовать использовать инструменты трассировки, такие как Logcat или сторонние инструменты для отслеживания ошибок в приложении на устройстве Android. Они могут помочь вам идентифицировать проблему и выявить причину вылета приложения.
  21. вообщем установка targetSdkVersion в 29 возвращает доступ ко всем файлам. гугл здесь пишет, что достаточно MANAGE_EXTERNAL_STORAGE объявить, но нифига с targetSdk выше 29 не работает. а насчет опции "разрешить чтение памяти в любом режиме" в разрешениях доступа к файлам так и не понял. в некоторых прогах, типа x-plorer, заходишь в права и там три варианта выбора включая этот. как оно у меня раньше было ума не приложу. но при выборе искало все файлы при sdk 32. ну пока придется 29 апи писать. на гитхабе ещё какой то код нашел, но вываливается с ошибкой заколебали вообщем, постоянно что то придумывают с этой безопасностью. костыли какие то приходится придумывать..
  22. Привет. Я делаю Android компонент. Я использовал TControl как класс. Проблемы TControl памяти. property Position stored True; property Width stored True; property Height stored True; constructor TAZVideoPlayer.Create(AOwner: TComponent); begin inherited; Log.d ( Round(Self.Position.X).ToString + 'x' + Round(Self.Position.Y).ToString + '_' + Round(Self.Width).ToString + 'x' + Round(Self.Height).ToString ); end; var V: TAZVideoPlayer; begin V := TAZVideoPlayer.Create(Self); V.Position.X := 112; V.Position.Y := 112; V.Width := 100; V.Height := 100; Настройки не будут записаны. Где я ошибаюсь? Logcat: FMX: App: 0x0_50x50
  23. Господа, есть ли способ проверить утечки памяти в Android-приложении? ReportMemoryLeaksOnShutdown работает только для Windows.
  24. Ссылка: http://delphifmandroid.blogspot.ru/2017/03/android-studio.html Автор: Ефимов Андрей Описание:
  25. Пример, взятый из Интернета: // clears the canvas Image1.Bitmap.Clear(TAlphaColors.White); // loads the bitmap using the TOpenDialog. if OpenDialog1.Execute then MyBitmap := TBitmap.CreateFromFile(OpenDialog1.Files[0]); // set the MyRect coordinates MyRect := TRectF.Create(50, 30, 150, 200); Image1.Bitmap.Canvas.BeginScene; // draws on the rectangle specified by MyRect the area from MyBitmap specified by MyRect Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyRect, MyRect, 20); Image1.Bitmap.Canvas.EndScene; Если мы, допустим, раз в секунду повторяем эту процедуру, постоянно загружая в Image1 новый MyBitmap, то нужно ли делать MyBitmap.Free или очистка памяти происходит сама?
×
×
  • Создать...