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.
Optimisation sur lecture de Socket
Re: Optimisation sur lecture de Socket
Dernière édition par zugsoft le 16 Fév 2015 17:01, édité 1 fois.
Moon RTS
Re: Optimisation sur lecture de Socket
Bravo ! ^_^
Re: Optimisation sur lecture de Socket
Je viens de voir que mon premier essai de jeu en réseau avec Unity, c'était pas si loin que ca
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.
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