Vorrei verificare quanto è grande il codice compilato di alcune classi (in byte). Mi piacerebbe ottimizzarli per le dimensioni, ma ho bisogno di sapere da dove cominciare.Determina C# Dimensione codice
risposta
Se si desidera conoscere la dimensione in byte necessaria per memorizzare una classe/tipo in fase di esecuzione.
Per value types utilizzare sizeof(type)
, per reference types, utilizzare sizeof
su ogni campo/proprietà.
Se volete conoscere la dimensione delle DLL gestite, il modo più ovvio è quello di compilare il dll e verificare la dimensione del file. Per fare questo in modo programmatico, dai un'occhiata alla risposta di user1027167 e alla classe CodeDomProvider
.
Qualcos'altro che potrebbe essere in grado nel codice è ottenere l'IL generato di ciascun metodo nelle classi così come lo sizeof
di campi come misura della dimensione (forse solo relativa).
È possibile utilizzare il metodo MethodBase.GetMethodBody per questo.
Una volta che il Roslyn (compiler as a service) viene rilasciato (preview available) si potrebbe probabilmente ottenere più facilmente e, eventualmente, con precisione (come è non solo i metodi e campi che compongono una classe IL.
Se volete sapere il dimensione del codice utilizzato per produrre una DLL, dovrai cercare qualcosa come Reflector
Mi piacerebbe conoscere la dimensione del codice di ogni classe nella DLL gestita. –
Quando si dice dimensione del codice, si intende la dimensione della DLL o la dimensione del codice utilizzato per produrre la DLL? –
Dimensioni del codice compilato = DLL :) –
Supponendo che tu voglia conoscere la dimensione in byte del tuo codice compilato penso che devi compilarlo Se vuoi automatizzare guarda, questo:
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 variabile "codice" (qui è un StringBuilder) deve contenere il codice sorgente valido della classe che si desidera misurare. Dopo la compilazione, devi solo determinare le dimensioni del gruppo di output.
Si noti che il metodo 'CSharpCodeProvider.CreateCompiler' è ora obsoleto. È possibile utilizzare direttamente i metodi 'ICodeCompiler' su' CSharpCodeProvider'. –
Potrebbe essere una soluzione. Dovrei fare un po 'di refactoring, ma potrebbe funzionare. –
Un metodo sarà quello di ottenere la dimensione di MSIL con Reflection. Sarà necessario eseguire il ciclo di tutti i metodi, i setter e i getter della proprietà e i costruttori per determinare la dimensione di MSIL. Inoltre, ci saranno differenze di dimensioni basate sulle build di Debug versus Release.
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;
}
Stavo cercando come trovare la dimensione MSIL di un singolo metodo, per indovinare se un metodo sarebbe probabilmente in linea, e questa era la soluzione per me. Grazie! –
- 1. Determina la dimensione corretta in loadView
- 2. Swift: Determina la dimensione dello schermo di iOS
- 3. Determina la dimensione di un documento usando Mongoid
- 4. determina la dimensione dell'asse della matrice in pixel
- 5. Cosa determina la dimensione di un oggetto salvato in R?
- 6. Oracle - Determina la dimensione massima supportata per l'espressione regolare
- 7. C++ determina se la classe è paragonabile
- 8. C++ dimensione dinamica dell'array
- 9. C++ dimensione della matrice
- 10. Dimensione parametro delegato C#
- 11. Ridurre Dimensione di C#
- 12. Cosa determina in primo luogo l'edizione e la dimensione del database SQL di Azure con il codice EF?
- 13. Dimensione massima stack per programma C/C +?
- 14. Determina i barattoli inutilizzati per copertura del codice?
- 15. dimensione di struct in C
- 16. Dimensione massima pila C/C++ del programma
- 17. Come si determina la dimensione del lotto ADO.NET consigliata nel mondo reale?
- 18. Determina la versione del file dll di riferimento in C#
- 19. Dimensione booleana primitiva in C#
- 20. Il modello C++ determina la funzione tipo di ritorno
- 21. Determina la codifica di una stringa in C#
- 22. C trovare la dimensione della matrice statica
- 23. Come si determina la dimensione/il frame di un UINavigationItem.titleView personalizzato?
- 24. Determina la dimensione fisica della mem in modo programmatico su OSX
- 25. Determina l'orientamento del dispositivo e il suo angolo risultante su una dimensione?
- 26. Le parentesi fanno la differenza quando si determina la dimensione di un array?
- 27. C++ Che cosa determina quale versione di C++ può essere eseguita su un'architettura specifica (come Arduino)
- 28. Modifica dimensione carattere terminale con C++
- 29. C# Dimensioni del codice e tempo di esecuzione del codice
- 30. Riduzione della dimensione del codice EXE di destinazione GCC?
Stai utilizzando la lingua sbagliata. – ordag
Windows Explorer? ;-) – jadarnel27
Questo desiderio ha qualche ragionamento pratico dietro, o è pura curiosità oziosa? – LukeH