Я хотел бы проверить, насколько велика скомпилированный код некоторых классов (в байтах). Я бы хотел оптимизировать их по размеру, но мне нужно знать, с чего начать.Определить размер кода C#
ответ
Если вы хотите узнать размер в байтах, необходимый для хранения класса/типа во время выполнения.
value typessizeof(type)
, для reference types, используйте sizeof
на каждое поле/свойство.
Если вы хотите узнать размер управляемых библиотек DLL, очевидный способ для компиляции DLL и проверить размер файла. Чтобы сделать это программно, взгляните на ответ пользователя1027167 и класс CodeDomProvider
.
Что-то еще, что может быть полезным в коде, это получить генерируемый IL каждого метода в ваших классах, а также поля sizeof
в качестве меры (возможно, только относительного) размера.
Для этого можно использовать метод MethodBase.GetMethodBody.
После Roslyn (compiler as a service) отпускании (preview available) вы могли бы, вероятно, получить его более легко и, возможно, точно (как это не только методы и поля, которые составляют класс IL.
Если вы хотите знать размер кода, используемого для создания DLL, вам нужно будет найти что-то вроде Reflector
Я хотел бы знать размер кода каждого класса в управляемой DLL. –
Когда вы говорите размер кода, вы имеете в виду размер DLL или размер кода, используемого для создания DLL? –
Размер скомпилированного кода = DLL :) –
Предполагая, что вы хотите узнать размер в байтах вашего скомпилированного кода, я думаю, вам нужно его скомпилировать. Если вы хотите автоматизировать это, посмотрите на это:
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;
Переменный «код» (здесь его StringBuilder) должен содержать действительный исходный код вашего класса, который вы хотите измерить. После компиляции вам нужно только посмотреть, какой размер имеет выходная сборка.
Обратите внимание, что метод CSharpCodeProvider.CreateCompiler теперь устарел. Вы можете использовать методы 'ICodeCompiler' непосредственно на' CSharpCodeProvider'. –
Может быть решением. Мне нужно будет сделать рефакторинг, но это может сработать. –
Один из способов - получить размер MSIL с отражением. Для определения размера MSIL вам нужно будет перебрать все методы, средства определения свойств и геттеры и конструкторы. Кроме того, будут различия в размере, основанные на сборке 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;
}
Я искал, как найти размер MSIL одного метода, чтобы угадать, может ли метод быть встроенным, и это было для меня решением. Благодаря! –
- 1. определить размер кода
- 2. Определить размер кода Java модулей
- 3. C++ metaprograming определить размер массива
- 4. Как определить размер C# Object
- 5. Как определить размер объекта, C#?
- 6. C++ Struct - Определить минимальный размер
- 7. C# Размер кода и время выполнения кода
- 8. C как определяется размер кода?
- 9. Определить размер массива символов в C
- 10. Как определить размер структуры в C
- 11. Как определить размер файла в C?
- 12. Как определить размер моего массива в C?
- 13. Определить размер динамически распределенной памяти в C
- 14. C++: Array, инициализатор не может определить размер
- 15. Как определить размер всей структуры в C?
- 16. Определить папку Размер
- 17. Невозможно определить размер массива указателей
- 18. определить раздел кода
- 19. Невозможно определить причину вывода кода c
- 20. Размер кода Visual Studio 2015 (C++)
- 21. Размер IL для кода Xamarin C#?
- 22. Определить размер массива
- 23. Как определить размер проекта (строки кода, точки функции, другие)
- 24. Как определить размер кода и активов в SWF?
- 25. . Размер кода .NET CIL
- 26. Как определить размер объектного кода в Linux, когда «размер» дает неправильный ответ?
- 27. определить размер таблицы в xxtable
- 28. Определить размер адреса, присвоенного указателя
- 29. Как определить размер лайтбокса?
- 30. Определить размер InputStream
Вы используете неправильный язык. – ordag
Проводник Windows? ;-) – jadarnel27
Есть ли у этого желания какие-либо практические рассуждения позади него, или это просто праздное любопытство? – LukeH