Проблема с производительностью MethodInfo.Invoke

Я читаю и записываю данные в файл и из него. Данные в файле могут быть числами с плавающей запятой, двойными значениями, целыми числами и т. д. Тип неизвестен до времени выполнения. Я буду называть тип данных, хранящийся в файле, Tin. Данные считываются или записываются из массивов типа Tout. Этот тип тоже неизвестен до времени выполнения.

Кодовая последовательность примерно такая. В методе Open известны Tin и Tout, мы можем создавать методы чтения и записи для известных типов данных.

Open(...)
{
   MethodInfo ReadMethod = typeof(...)GetMethod("ReadGeneric").MakeGenericMethod(new Type[] {typeof(Tin), typeof(Tout)}));
}

Циклы чтения и записи повторяются миллионы раз и полагаются на отражение для вызова соответствующих методов, как показано ниже.

Read loop
{
   var values = (Tout[])ReadMethod.Invoke(this,new object[]{index});
   process...
}

При изучении этого кода с помощью профилировщика производительности я обнаружил, что c колоссальной суммой, если время тратится только на вызов методов чтения и записи во время выполнения.

Как мне ускорить это.

17
задан svick 25 April 2012 в 10:46
поделиться