LINQ to SQL выполняет ряд трюков.Если ваш собственный ORM использует рефлексию, вам нужно будет ее кешировать, но я подозреваю, что разница может заключаться в том, что вы не кешируете ординалы.переменная для каждого порядкового номера и ссылка на них внутри вашего цикла:
var someFieldIdx = dataReader.GetOrdinal("SomeField");
...
while(dataReader.Read()) {
...
myNewObj.SomeProperty = dataReader.GetInt32(someFieldIdx);
...
}
Еще лучше было бы кэшировать их по некоторым статическим переменным.
Если вы уже делаете это, возможно, вы захотите опубликовать часть своего кода ORM, который создает экземпляры объектов.