Question

Je veux m'assurer que mon application ne subit aucun blocage de l'interface utilisateur lorsque je travaille sur des fichiers sur un système de fichiers lent (par exemple, un réseau, un CD / DVD ou un disque dur spun-down).

J'utilise directement les opérations du système de fichiers Cocoa. Je crains que cela ne demande trop d'efforts pour simuler ou résumer tout cela uniquement à des fins de test. De plus, il pourrait y avoir des façons non évidentes de toucher le système de fichiers à mon programme.

J'ai essayé d'utiliser des lecteurs réseau pour les tests, mais la mise en cache du système d'exploitation rend les tests non répétables et ... trop rapides:)

Existe-t-il un système de fichiers MacFuse délibérément lent? Une autre méthode qui me permettrait de trouver tous les hoquets de l’UI et les conditions de course causés par des retards inattendus?

Était-ce utile?

La solution

La meilleure solution est MacFUSE , comme indiqué ailleurs; c'est assez facile à simuler. Vous pouvez également essayer de monter un partage sur NFS puis d'utiliser un bit le limitant à l'aide du ipfw intégré, comme:

ipfw pipe 1 config 1KByte / s ipfw add 1 pipe 1 src-port 2049

ou si vous utilisez WebDAV

ipfw add 1 canal 1 src-port 80

Les requêtes seront alors alimentées au compte-goutte, quel que soit le niveau de conduite que vous avez défini. Vous devriez pouvoir vous en débarrasser à nouveau avec:

ipfw delete 1

Autres conseils

Peut-être acheter une clé lente? J'ai trouvé des articles chez Best Buy qui étaient glaciaux. Branchez-les sur plusieurs concentrateurs USB et peut-être sur un clavier, pour qu'ils soient connectés très simplement.

-W

Écrire un système de fichiers MacFUSE avec leur framework Cocoa est extrêmement simple. En fait, je pense qu’il existe même un exemple de système inclus qui ne fait que refléter le système de fichiers local. Pourquoi ne pas adapter rapidement ce code afin qu’il appelle sleep () un instant lors de chaque opération?

En fonction de l'endroit où vous craignez des problèmes, ma première idée serait simplement d'inclure une couche supplémentaire d'appels de fonction entre l'application et le fichier i / o, et de créer dans cette couche des appels sleep (). Autrement dit, quelle que soit la langue que vous utilisez, remplacez le mot "read". appel avec "readDelegate" et laissez readDelegate en veille pendant un laps de temps déterminé, puis effectuez la lecture réelle et renvoyez la valeur. Lorsque vous êtes prêt à passer à la production, vous n’avez même pas besoin de retirer le calque supplémentaire, mais de retirer le sommeil.

Pourquoi pas un lecteur de disquette? Il doit y avoir des externes que vous pouvez simplement connecter via USB ou autre chose ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top