Optimisation sur lecture de Socket

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
zugsoft
Messages : 386
Inscription : 26 Juin 2014 23:43
Localisation : Swiss
Contact :

Re: Optimisation sur lecture de Socket

Message par zugsoft » 13 Fév 2015 19:55

J'ai trouvé un programme en C# pour Unity pour compacter en LZF : http://forum.unity3d.com/threads/lzf-co ... ty.152579/

Je l'ai mis en place, il est extrêmement rapide, mais il ne compresse pas beaucoup.
Avec une moyenne de 1000 paquets a compacter d'une taille initiale de 463Octets, voici quelques chiffres et temps :

Huffman original : 247 Octets
Temps Generation Arbre:1.400426ms
Temps Encode:13.498264ms
Temps Decode:0.168306ms

LZF : 401 Octets
Temps Encode LZF:0.061962ms
Temps Decode LZF:0.017746ms

Huffman optimisé: 247 Octets
Temps Generation Arbre:1.400426ms
Temps Encode2 en remplaçant les Collections par des List :10.912338ms
Temps Decode:0.168306ms

Huffman super optimisé: 247 Octets
Temps Generation Arbre:1.400426ms
Temps Encode3 en remplaçant les List par des bool[] :3.579378ms
Temps Decode:0.168306ms

Huffman Menfou : 247 Octets
Temps Generation Arbre:1.400426ms
Temps encode4 en utilisant une méthode maison : 0.107499ms
125x plus rapide que l'original

Encore une petite optimisation avec l'utilisation d'un tableau de caractère maison et trié:
Temps en encodage 0.087ms, soit 154x plus rapide que l'original.

Le plus efficace est de ne pas utiliser le système d'encodage de Huffman, bien trop d'itération.
Et fabriquer un arbre qui restera toujours le meme à partir de données types.

Je vais voir maintenant d'optimiser le décodage.
Dernière édition par zugsoft le 16 Fév 2015 17:01, édité 1 fois.
Moon RTS

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Optimisation sur lecture de Socket

Message par Alesk » 14 Fév 2015 13:03

Bravo ! ^_^

zugsoft
Messages : 386
Inscription : 26 Juin 2014 23:43
Localisation : Swiss
Contact :

Re: Optimisation sur lecture de Socket

Message par zugsoft » 04 Jan 2017 16:52

Je viens de voir que mon premier essai de jeu en réseau avec Unity, c'était pas si loin que ca :D
J'ai progressé dans mon code coté client et coté serveur depuis ce topic.

Je ne pourrai pas comparer mes temps mesurés le 13 février 2015 avec mes nouveaux temps, car il ne s'agit pas du meme ordinateur, mais la comparaison avec LZF ou Huffmann originale est toujours d'actualité.

Maintenant pour compresser sans perte de donnée 467bytes, je suis autour de 0.02ms, avec une meilleur compression
Je me rapproche de LZF au niveau temps de compression, et coté compression c'est bien mieux que du LZF

Compression:
Huffmann super optimisé : 1.33ms after : 182Bytes
Huffmann menfou+ optimisé : 0.074613 after : 182Bytes
Huffmann menfou++ optimisé : 0.023443 after : 182Bytes
LZF Compress : 0.011ms after : 344Bytes

Decompression :
Huffmann Decompress original : 0.13ms
Huffmann Decompress optimisé : 0.041ms
LZF Decompress:0.037ms

J'ai aussi rajouté de la sécurité dans le paquet envoyé avant le compresser, je pense qu'il va falloir se lever très tot avant de pouvoir hacker les trames échangées.

Grace a cette compression + un mini découpage par zone sur mes serveurs, un vCPU tient maintenant sans probleme 300 clients sur une meme partie.
Moon RTS

Répondre

Revenir vers « Scripting »