object adds extra overhead if you call extra boxing. And even then this effect is quite minimal. In your case, reader[i] always returns object . You already have an object , regardless of whether it is a reference to a string or int, etc. course call .ToString() adds overhead; in most cases (int, DateTime, etc.) this includes both the formatting code and the allocation of one (or more) additional lines. When you change the string you change the data (the worse, for example, IMO, for example, you can no longer do the correct sorting by date, for example) and add service data. The key case here is that all columns are already rows - in this case, you simply add a few calls to virtual methods (but without additional real work).
For information, if you are after raw performance, I highly recommend looking at micro-ORMs such as dapper. They are highly optimized, but avoid the weight of the "full" ORM. For example, in dapper:
var myData = connection.Query<TypedObject>("select * from test_table").ToList();
I expect it to perform very comparable, providing you with strongly typed object data.
source share