Анализ кода из общего промежуточного языка (CIL)

Я хотел бы сделать довольно простой анализ программы для моего кода.NET (который представляет собой комбинацию кода.dlls, .exe и C#). Используя общую инфраструктуру компилятора Microsoft, я сначала преобразовал код в форму IL, используя которую я хотел бы построить граф вызовов. Как только у меня появится граф вызовов, есть ли какие-нибудь стандартные инструменты, которые можно использовать для понимания сложности кода, выявления узких мест, использования памяти и т. Д.? Любые указатели будут по достоинству оценены!

1 ответ

Я думаю, что вы хотите, это почти невозможно. Количество распределений объектов может сильно отличаться в зависимости от конкретного ввода.

Например, представьте, что в вашей программе есть метод, который выделяет много объектов, но он будет работать только при определенных условиях. Если ваш анализ должен был точно оценить количество распределений объектов, он должен знать, был ли запущен метод. И единственный способ сделать это - на самом деле оценить это состояние, что означает, что вам действительно нужно будет запустить программу.

А использование памяти, вероятно, еще сложнее: для этого потребуется отследить весь граф объектов и смоделировать ГХ.

Вкратце: лучший способ узнать характеристики производительности вашей программы - это запустить ее. Делать то же самое с использованием статического анализа было бы сложно и неточно. Не забывайте, что невозможно определить, завершает ли программа статический анализ. Я думаю, что вы хотите, еще сложнее.

Другие вопросы по тегам