Всем доброго времени суток!
Столкнулся с такой проблемой, есть класс, который создается с помощью 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 секунд, есть идеи? Пока решил переделать (не удалось).