web-dev-qa-db-fra.com

Quelle quantité de mémoire une application iOS peut-elle utiliser?

... quand il est au premier plan.

Pour l'iPad d'origine, avec 256 Mo de RAM, j'ai trouvé que mon application pouvait utiliser jusqu'à 100-140 Mo avant d'être tuée.

Quelle est la situation de nos jours? Je pourrais aller acheter un tas d'iDevices et faire un test moi-même, mais je voulais vérifier: Quelqu'un a-t-il fait un test?

Je comprends que cela n'a pas de réponse précise, et je recherche une plage comme: "Les applications sont tuées lorsqu'elles utilisent 300-350 Mo sur un appareil de 512 Mo. Vous pouvez utiliser en toute sécurité jusqu'à 300 Mo".

Plus précisément:

  1. Sur un appareil avec 512 Mo de mémoire, combien une application peut-elle utiliser?

  2. Sur un appareil avec 1 Go de mémoire, comment peut-on utiliser une application?

  3. Y a-t-il une différence entre ce qui précède? Chaque application individuelle est-elle limitée à une quantité fixe de mémoire dans le but de conserver quelques applications en arrière-plan, ou l'application au premier plan peut-elle supprimer TOUTES les applications en arrière-plan de la mémoire et prendre la totalité de 1 Go (ou 512 Mo) pour elle-même (et la OS, bien sûr)?

  4. Est-il important que l'appareil soit un iPad ou un iPhone? Si je fais fonctionner mon application sur un iPad avec 512 Mo de mémoire, cela signifie-t-il qu'elle fonctionnera également sur un iPhone avec 512 Mo de mémoire, et vice versa? Je sais que UIViews, et leurs magasins de support Core Animation, prendront plus de mémoire sur l'iPad en raison de la plus grande taille de l'écran, mais à part cela, la situation de la mémoire est-elle la même entre un iPhone et un iPad avec la même mémoire?

Je fais référence à la mémoire totale utilisée par le processus - tas, pile, données statiques, code, magasins de sauvegarde Core Animation, etc.

Si vous avez tendance à dire que cela dépend de la version du système d'exploitation, vous pouvez supposer que nous parlons d'iOS 7.

Je sais que l'utilisation de trop de mémoire signifie que lorsque mon application passe en arrière-plan, iOS la terminera plus rapidement. Je suis d'accord avec ce compromis pour l'instant.

38
Vaddadi Kartick

J'ai écrit une application de test qui mesure la quantité de mémoire qu'une application peut allouer avant de la tuer. Voici les chiffres:

  • iPhone 5s (iOS 10, mode débogage, 1 Go de mémoire): 600 Mo peuvent être alloués
  • iPad Air 2 (iOS 11.4, 2 Go de mémoire): 1,3 Go peut être alloué
  • iPhone X (iOS 11.4, 3 Go de mémoire): 1,2 Go peut être alloué
  • iPhone 7 Plus (iOS 12.1, 3 Go de mémoire): 1,8 Go peut être alloué
  • iPad 13 pouces (iOS 11.4, 4 Go de mémoire): 3 Go peuvent être alloués

Il est intéressant de noter que je n'ai jamais reçu d'avertissement de mémoire.

Voici le code si vous souhaitez exécuter le test vous-même:

import UIKit

let sizeInMb = 100

class Wrapper {
  var array = [UInt8](repeating: 0, count: sizeInMb * 1048576)  // 100 MB
}

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        window = UIWindow(frame: UIScreen.main.bounds)

        var i = 0

        sleep(5)  // So that you can see how much memory it consumes before any allocations.

        while true {
            let w = Wrapper()
            Unmanaged<Wrapper>.passRetained(w)
            i += 1
            print("\(i * sizeInMb) MB allocated")
            sleep(1)  // Give the OS a chance to kill other processes.
        }

        return true
    }

    func applicationDidReceiveMemoryWarning(_ application: UIApplication) {
        print("Memory warning!")
    }
}

Cela ne fonctionne pas sur le simulateur. Tout ce qui concerne les performances doit être testé sur l'appareil.

32
Vaddadi Kartick

En 2014, mon appareil de test matériel minimum est un iPhone 4s exécutant iOS7 avec environ 50 applications installées. Après un redémarrage, le système d'exploitation peut libérer jusqu'à 200 Mo sur 512 au total. Après une semaine d'utilisation régulière, le mieux qu'il puisse gérer est de 100 Mo.

Je développe une application Adobe AIR qui ne reçoit pas d'avertissement de mémoire insuffisante du système d'exploitation. S'il atteint la limite, il se bloque. Essayez donc de rester en dessous de 100 Mo si vous souhaitez exécuter sur des appareils avec 512 Mo de RAM au total. Rappelez-vous, c'est pour le gpu et le cpu combinés.

12
Sarah Northway

Salut, je viens de tester avec mon application, pour un périphérique de 512 Mo, l'application se bloque à tout moment après 250 Mo d'utilisation, ce qui donne un problème de "pression de mémoire".

8
Ajeet