10
votes

La bibliothèque de decompressez GZIP la plus rapide dans .NET

Quelle bibliothèque .NET a la performance de décompression la plus rapide (en termes de débit)?

Il y a plusieurs bibliothèques là-bas ...


10 commentaires

Aucun indice concernant les repères que vous recherchez, mais il y a aussi SharpziPlib ICSHARPCODE.NET/OPENSOURCE/ SharpziPlib


L'exécutable 7-Zip autonome est généralement considéré comme étant juste en haut en termes de vitesse ... et Sevenziplib est simple un wrapper .NET de celui-ci, alors j'irais pour cela. Je n'ai pas de réelles repères cependant.


Pourquoi est-ce important? C'est toujours une fraction du temps d'E / S nécessaire pour obtenir le flux.


Cela doit-il être une solution à 100% pure .NET ou êtes-vous prêt à utiliser tout ce que vous pouvez accéder à partir de .net?


@hans Passant: C'est important car j'ai 1000 fichiers multi-gb, j'ai besoin de décompresser. Le débit ne sera pas une fraction du temps d'E / S nécessaire pour obtenir le flux.


@marnix van Valen: Je suis prêt à utiliser une solution accessible à partir de .NET ... qu'est-ce que vous avez à l'esprit?


@RUDIGER: Le nombre et la taille de vos fichiers ne font aucune différence avec l'argument de Hans Passant. La seule chose qui ferait la différence est que si vous lisiez les fichiers éteint un support de stockage exceptionnellement rapide comme SSD ou un raid large. Toute mise en œuvre non créneuse de dégonfler sur une CPU moderne sera affamée pour une entrée à un seul taux de lecture d'un disque dur ordinaire. (Vous savez que le système d'exploitation lit le prochain bloc d'entrée tandis que le bloc actuel est décompressé, non? Traiter et lire les heures de traitement ne sont pas additifs.)


@J_Random_hacker: Nous avons une jolie "large" configuration RAID; Les gigaoctets à un chiffre par seconde ... Assez pour les disques de ne pas nécessairement être le cou de la bouteille. J'étais en quelque sorte en supposant que le gzip le plus rapide sur un disque soit le plus rapide d'un cluster lorsque je l'accélère ...


@RUDIGER, quelle est votre différence de performance entre simplement lire le fichier et jeter la lecture de la lecture, la décompression et la mise au rebut? Cela vous dira si la décompression vaut vraiment la peine d'optimiser dans ce scénario.


@Rudiger: Dans ce cas, votre débit d'E / S pourrait bien dépasser le débit de la CPU. J'ai fait des recherches rapides dans l'espoir de trouver des mesures de débit de décompression de mémoire à mémoire de mémoire pour la décompression gzip et de ne trouver aucune, mais a été surprise de voir la preuve que la compression est toujours liée à la CPU. Je sais que la décompression gzip est beaucoup moins importante de la CPU, mais elle est possible que j'ai surestimé mon cas plus tôt;)


3 Réponses :


4
votes

Les repères de performance de compression varient en fonction de la taille des flux compressés et du contenu précis. S'il s'agit d'un goulot d'étranglement particulièrement important pour vous, il serait possible de rédiger un exemple d'application à l'aide de chaque bibliothèque et d'exécuter des tests avec vos fichiers réels.


1 commentaires

Exactement, la performance de la compression varie en fonction du type de données en question.



2
votes

J'ai eu de bonnes performances avec SevenziPlib pour de très grands fichiers, mais j'utilisais le format 7ZIP natif et le contenu hautement compressible. Si vous utilisez du contenu qui n'aura pas de ratio de compression élevé, votre débit varie considérablement par rapport à certains des points de repère que vous pouvez trouver pour ces bibliothèques.


0 commentaires

14
votes

J'ai trouvé des problèmes avec la mise en œuvre de Gzipstream de Microsoft ne pouvant pas lire certains fichiers GZIP, alors j'ai testé quelques bibliothèques.

Ceci est un test de base que je vous suis adapté à votre exécution, à la peau et à décider: xxx

et le résultat dans le système je suis en cours d'exécution (mono sous Linux), est comme suit: xxx

Être averti que c'est la GZIP de Mono et la version de Microsoft donnera ses propres résultats (et comme je l'ai mentionné, je ne peux pas gérer de gzip que vous le donnez)

C'est ce que j'ai Sur un système Windows: xxx

Il est assez facile d'ajouter plus de tests ...


2 commentaires

Pouvez-vous essayer septzipshaarp Sevenzipshaparp.codeplex.com


System.IO.Cression a l'air plutôt bien si nous regardons juste le temps. Mais cela semble moins que si nous regardons les tailles produites. Ensuite, encore une fois, les deux mesures pourraient être atypiques et résultent de votre entrée particulière. Cela ne nous dit pas vraiment beaucoup ...