Что делает JIT компилятор 5 секунд?
От: GrishaCo  
Дата: 16.03.13 16:58
Оценка:
Всем доброго времени суток!

Столкнулся с такой проблемой, есть класс, который создается с помощью CodeDom (порядка 90 000 строк). Создаю его экземпляр. При попытке вызвать метод инициализации приложение виснет на 5 секунд и после этого выполняется метод. При чем такое поведение как в релизе, так и в дебаге. При переходе в тело метода "InitMethods()" через студию такая же ситуация.

Вопрос, что происходит с CLR или JIT? Где это можно посмотреть и как? Профайлер показывает, что метод выполняется 15 миллисекунд, все остальное время непонятно на что тратится.

Далее код:

Базовый класс для класса значений:

public abstract class ValueBase<TValue>
{
}


Интерфейс для класса значений:


public interface IParamValue
{
    void InitValue(object value);
}



Класс значений:


public class ParamValueDouble : ValueBase<double>, IParamValue
{
    public void InitValue(object value)
    {
    }
}



Базовый класс для генерируемого класса:


public class Base<TValueType,TValue>
{
    public delegate TValueType GetValue();
    protected Dictionary<string, Dictionary<DateTime, GetValue>> calculateMethods;
}


Сам генерируемый класс (у меня 11000 методов вида P1 — P11000):


public class calculate : Base<ParamValueDouble, double>
{
     public ParamValueDouble P1()

     {

          return 0;

     }

     //и т.д.

     public void InitMethods()
     {
          calculateMethods = new Dictionary<string, Dictionary<DateTime, GetValue>>();

          methods = new Dictionary<DateTime, GetValue>();

          methods.Add(new DateTime(...), P1);

          calculateMethods.Add("Code1", methods);

          //и т.д.
     }
}


При вызове метода InitMethods, приложение виснет на 20 секунд, есть идеи? Пока решил переделать (не удалось).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.