Je voudrais vérifier la taille du code compilé de certaines classes (en octets). Je voudrais les optimiser pour la taille, mais j'ai besoin de savoir par où commencer.Déterminer la taille du code C#
Répondre
Si vous voulez connaître la taille en octets nécessaire pour stocker une classe/un type lors de l'exécution.
Pour value types utilisez sizeof(type)
, pour reference types, utilisez sizeof
sur chaque champ/propriété.
Si vous voulez connaître la taille des DLL gérées, la manière évidente est de compiler la dll et vérifier la taille du fichier. Pour ce faire, consultez la réponse de user1027167 et la classe CodeDomProvider
.
Autre chose qui pourrait être faisable dans le code est d'obtenir l'IL généré de chaque méthode dans vos classes ainsi que les champs sizeof
comme une mesure de (peut-être juste relative) taille. Vous pouvez utiliser la méthode MethodBase.GetMethodBody pour cela.
Une fois que le Roslyn (compiler as a service) est libéré (preview available) vous pourriez probablement obtenir plus facilement et peut-être, avec précision (comme ce ne sont pas seulement les méthodes et les champs qui constituent une classe IL.
Si vous voulez connaître la taille du code utilisé pour produire une DLL, vous devrez regarder quelque chose comme Reflector
J'aimerais connaître la taille du code de chaque classe dans les DLL managées. –
Quand vous dites taille de code, voulez-vous dire la taille de la DLL, ou la taille du code utilisé pour produire la DLL? –
Taille du code compilé = DLL :) –
En supposant que vous voulez connaître la taille en octets de votre code compilé, je pense que vous devez le compiler Si vous voulez automatiser ça, regarde ça:
ICodeCompiler comp = (new CSharpCodeProvider().CreateCompiler());
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");
cp.ReferencedAssemblies.Add("system.data.dll");
cp.ReferencedAssemblies.Add("system.xml.dll");
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
CompilerResults cr = comp.CompileAssemblyFromSource(cp, code.ToString());
if (cr.Errors.HasErrors)
{
StringBuilder error = new StringBuilder();
error.Append("Error Compiling Expression: ");
foreach (CompilerError err in cr.Errors)
{
error.AppendFormat("{0}\n", err.ErrorText);
}
throw new Exception("Error Compiling Expression: " + error.ToString());
}
Assembly a = cr.CompiledAssembly;
La variable "code" (ici c'est un StringBuilder) doit contenir le code source valide de la classe que vous voulez mesurer. Après la compilation, il suffit de regarder quelle est la taille de l'assemblage de sortie.
Notez que la méthode 'CSharpCodeProvider.CreateCompiler' est maintenant obsolète. Vous pouvez utiliser directement les méthodes 'ICodeCompiler' sur' CSharpCodeProvider'. –
Peut-être une solution. J'aurais besoin de refactoring, mais ça pourrait marcher. –
Une méthode sera d'obtenir la taille de MSIL avec Reflection. Vous aurez besoin de parcourir toutes les méthodes, les setters de propriété et les getters, et les constructeurs pour déterminer la taille du MSIL. En outre, il y aura des différences de taille en fonction des versions de débogage et de version.
using System.Reflection;
int totalSize = 0;
foreach(var mi in typeof(Example).GetMethods(BindingFlags.Public | BindingFlags.NonPublic |BindingFlags.Static | BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.SetProperty))
{
MethodInfo mi = typeof(Example).GetMethod("MethodBodyExample");
MethodBody mb = mi.GetMethodBody();
totalSize += mb.GetILAsByteArray().Length;
}
Je cherchais comment trouver la taille MSIL d'une seule méthode, pour deviner si une méthode serait probablement en ligne, et c'était la solution pour moi. Merci! –
- 1. Déterminer la taille du fichier C++
- 2. Déterminer la taille du code Java des modules
- 3. comment déterminer la taille du code objet sur Linux lorsque "taille" donne la mauvaise réponse?
- 4. Déterminer la taille du graphique avec xslt
- 5. PHP, Déterminer la taille du fichier distant
- 6. Déterminer la taille du support à partir du fichier ppd
- 7. Comment déterminer la taille du champ MS Access via OleDb
- 8. déterminer la taille d'un tableau
- 9. javascript pour déterminer la taille
- 10. Node.js: Déterminer la taille du fichier sur la modification
- 11. Déterminer la taille virtuelle du processus en utilisant Delphi
- 12. Comment déterminer la taille du code et des actifs dans un fichier SWF?
- 13. Existe-t-il un moyen simple de déterminer la taille du type en C#?
- 14. Assemblage Détermination de la taille du segment de code
- 15. Déterminer la taille totale du répertoire/tronc SVN
- 16. comment déterminer la taille d'un objet?
- 17. Augmenter la taille du tableau C++
- 18. ZXing Taille du code QR
- 19. Augmenter la taille du tableau en C++
- 20. Comment déterminer un processus "taille virtuelle" (WinXP)?
- 21. Comment déterminer la taille de l'objet Request.Form?
- 22. Comment déterminer la taille d'une liste SharePoint?
- 23. Déterminer à partir du code régulier Intégrer
- 24. C++ géré la taille du tableau
- 25. Réduire la taille du pdf dans C#
- 26. Comment référencer le début et la taille du segment à partir du code C
- 27. C taille du bloc OpenSSL
- 28. Fonction MySQL pour déterminer la proximité du code postal
- 29. Déterminer la police et la taille du texte à partir du HTML
- 30. Comment déterminer de manière fiable la taille du dossier à l'aide de FileSystemObject.Size?
Vous utilisez la mauvaise langue. – ordag
Explorateur Windows? ;-) – jadarnel27
Ce désir a-t-il un raisonnement pratique ou est-il simplement une curiosité oiseuse? – LukeH