[Résolu]Transfert d'image impossible au delà d'une petite taille
mybofy
Membre
Bonjour
Mavericks - Xcode 5
serveur PostgreSQL PG
application Herbier en cours de développement.
Herbier doit transférer une image vers PG (parmi bien d'autres choses).
L'image est récupérée dans une MYImageView par dragging : OK.
La NSImage associée est convertie en NSData : OK.
La NSData est transformée en "character varying" de PG pour l'insérer dans une requête SQL,via un Framework : OK (structure vérifiée et correcte).
Transfert image img0 (20ko) : OK.
Transfert image img1 (1Mo) : Herbier ne répond pas !
- la plante se produit autour de 1,4Mo (valeur aléatoire)
- il y a toujours des données envoyées (cf. moniteur d'activité), indéfiniment après la plante...
Transfert de img1 vers PG via FTP : OK.
Des pistes ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
timeout ?
La piste est intéressante.
Dans la configuration de PG il y a un statement_timeout.
Mis à 0, cela n'a rien changé.
Ailleurs que danq PG, je ne vois pas où il pourrait y avoir un timeout ?
Je commence à comprendre.
Dans moniteur d'activité, le message "Herbier ne répond pas" ne signifie pas que Herbier est planté, mais qu'il est en attente de la fin de l'opération de transfert.
Pour voir, j'ai laissé tourner : pour transférer une photo de 7Mo, il m'a fallu près de vingt minutes. Et Herbier est redevenu opérationnel.
Pour transférer cette photo, il faut 65 secondes avec Filezzilla, qui est normal avec mon débit montant.
Le problème est qu'avec les conversions, ce n'est pas 7Mo qui sont transférés mais 120Mo (dixit moniteur d'activité), pour une photo qui occupe 60Mo dans PG.
Il faut que je travaille tout cela, sinon je peux mettre mon projet à la corbeille.
La simple mention de timeout m'a mis sur la voie.
Merci
Tu veux dire que tu lances la requête réseau sur le thread principal ?!
Vas vite voir la doc de NSURLConnection et voir comment on lance des requêtes asynchrones.
Oui.
Je suis allé voir NSURLConnection.
Problème : j'utilise un Framework, qui masque les requêtes réseau.
Il y a bien NSThread.
Est-ce que je peux faire quelque chose comme ça :
- créer un thread qui appelle une fonction via un selector
- lancer le thread par un start
- faire une boucle sur isFinished ou mettre dans ma fonction une notification de fin ou installer un sheet...
- pendant ce temps là je peux faire autre chose selon l'option choisie : lister des données dans l'application ou aller prendre un café
ça serait sans doute mieux. Mais j'hésite à le faire car je n'y ai jamais touché et j'ai peur d'introduire des effets parasites nocifs, insoupçonnés et invisibles : j'ai déjà assez de mal avec le thread principal ...
C'est quoi ton framework ?
Parce qu'effectivement, créer un thread secondaire n'est pas forcément simple.
Même si tu dois créer un thread secondaire, n'utilise pas NSThread. Préfère NSOperation ou Grand Central Dispatch. Nous en avaons parlé à maintes reprises.
PGSQLKit http://www.druware.com/pgsqlkit/
C'est le seul framework qui me donne satisfaction pour gérer ma base de données PostgreSQL distante.
Dedans, il y a bien une fonction connectAsync, mais je ne réussis même pas à établir la connexion.
La documentation est très succincte.
Je crois que je vais abandonner l'asynchrone, au moins pour l'instant. Ce n'est guère critique pour moi, simplement la petite roue arc-en-ciel est horripilante.
Essaye de copier-coller ton code dans ce qui suit.