J'ai fait une bibliothèque GUI pour les jeux. Ma démonstration de test fonctionne à 60 fps. Lorsque j'exécute cette démo avec la version statique de ma bibliothèque, il faut 2-3% de cpu dans taskmanager. Quand j'utilise la version DLL, elle utilise environ 13-15%. Est-ce normal? Est-ce le cas, comment pourrais-je l'optimiser? Je lui demande déjà d'utiliser/O2 pour la plupart des fonctions inlining.Une DLL est-elle plus lente qu'un lien statique?
Répondre
Ne démarrez pas votre temporisateur de performances tant que la DLL n'a pas eu l'occasion d'exécuter sa fonctionnalité une seule fois. Cela lui donne le temps de charger dans la mémoire. Ensuite, démarrez la minuterie et vérifiez les performances. Il devrait alors correspondre à celui de la lib statique.
Gardez également à l'esprit que l'emplacement de chargement de la DLL peut grandement affecter la vitesse de chargement. L'adresse de base par défaut pour les DLL est 0x400000. Si vous avez déjà une autre DLL à cet endroit, le processus de chargement doit effectuer une étape de ré-adressage coûteuse qui va encore plus loin.
Si vous avez un tel conflit, choisissez simplement une autre adresse de base dans Visual Studio.
+1 pour avoir mentionné les problèmes d'adresse de base. –
Le problème d'adresse de base ne serait qu'un problème au moment du chargement. –
Vous aurez le temps de chargement de la DLL (devrait être juste une fois au début). Il n'est pas lié statiquement aux appels directs, donc je m'attendrais à une petite quantité de frais généraux mais pas beaucoup.
Toutefois, certaines DLL auront des frais généraux beaucoup plus élevés. Je pense aux objets COM bien qu'il puisse y avoir d'autres exemples. COM ajoute beaucoup de surcharge sur les appels de fonction entre les objets.
Il est un peu difficile de savoir ce qui est lié statiquement/dynamiquement. La DLL de votre bibliothèque est-elle liée statiquement à ses dépendances? Est-il possible que la DLL appelle d'autres DLL (qui sera lent)? Peut-être essayer d'exécuter un profileur à partir de valgrind sur votre exécutable pour déterminer d'où vient toute l'utilisation du processeur.
Si vous appelez des fonctions DLL, elles ne peuvent pas être intégrées pour un appelant. Vous devriez réfléchir un peu à vos limites de DLL.
Il est peut-être préférable que votre application dispose d'un petit fichier bootstrap exe qui exécute simplement une boucle principale dans votre DLL. De cette façon, vous pouvez éviter beaucoup de frais généraux pour les appels de fonction.
- 1. Lien vers une bibliothèque statique liée à une bibliothèque statique
- 2. WPF - Liaison statique de DLL
- 3. lien avec cygwin1.dll
- 4. export DLL d'une fonction statique
- 5. Pourquoi la détection des touches devient-elle plus lente et plus lente?
- 6. fonction statique plus rapide?
- 7. Pourquoi un schéma rendrait-il une colonne XML plus lente?
- 8. OpenCV highgui110.dll Lien Erreur
- 9. Exécution d'une application .NET plus lente
- 10. Atl71.dll denpendency existe toujours Même le lien statique à ATL est sélectionné
- 11. Utilisation d'une DLL qui lie à une bibliothèque statique
- 12. Lien une bibliothèque partagée statique à ma bibliothèque partagée
- 13. .Net Com Interop Créer une instance lente
- 14. Comment sécuriser un lien HTML statique
- 15. vues drupal plus lien
- 16. Résoudre une requête lente
- 17. lien statique sur AIX avec pthread
- 18. Lien vers une DLL compatible avec les adresses étendues
- 19. lien Flash sur le texte statique
- 20. C++ DLL version plus récente
- 21. Chargement de DLL avec lien physique
- 22. Intégrer une bibliothèque statique VC++ dans une DLL pour l'utiliser avec des assemblys gérés .Net
- 23. MSVC - boost :: liaison statique python vers .dll (.pyd)
- 24. L'application web Flex devient progressivement plus lente et gèle
- 25. L'insensibilité à la casse de regex est-elle plus lente?
- 26. Pourquoi une insertion de 1M est-elle plus lente sans transaction que dans une transaction?
- 27. Conservation d'instances distinctes de la mémoire statique d'une DLL
- 28. La version itérative d'un algorithme récursif est plus lente
- 29. Problèmes de lien C++ avec la méthode statique
- 30. Lien vers la DLL MSVC à partir de MinGW
Avez-vous profilé votre application? –
Vous devez profiler et voir où se trouve la différence significative. –
Aucune raison de profiler. Les devinettes non renseignées devraient être suffisantes pour déterminer les éventuels goulots d'étranglement dans votre application. Enfer, n'a même pas vraiment besoin de regarder le code source. –