Я не думаю, что можно дать один ответ, который обычно применим в этой ситуации, учитывая тот факт, что вы хотите общее решение для не только Oracle.Проблема в том, что поставщик .NET одного поставщика может быть быстрее, чем поставщик OLE DB, и наоборот для другого поставщика.Архитектура обеих этих технологий доступа к данным существенно отличается.
Мне кажется, что разница в скорости будет не такой большой.Так как кажется, что вы положили бы свой собственный слой доступа к данным поверх OLE DB, трудно сравнивать напрямую, пока вы не написали это.Но в целом, любой оператор модификации данных (например, UPDATE mytable set…), вероятно, не будет таким уж разным в любом случае.При использовании обеих технологий вы указываете данные параметров, если это необходимо, а затем отправляете команду на сервер.Большая часть затрат, вероятно, будет приходиться на сетевую задержку и время выполнения сервера.Самая большая разница, вероятно, вступит в игру при чтении наборов данных.
Чтение данных будет фактором, который может показать разницу в скорости.В зависимости от того, что вы планируете, вы можете прочитать данные на низком уровне.Например, с OLE DB вы можете вызвать IRowset :: GetNextRows.В .NET вы, возможно, прочитали бы наборы данных с помощью DbDataReader :: Read ().Я не знаю, является ли это типичным, но в коде, над которым я работал, метод OLE DB GetNextRows () был намного сложнее, чем реализация .NET Read ().Я не уверен, что это обязательно приведет к более медленному выполнению ... но это может.
По моему мнению, лучшим выбором будет использование ADO.NET.Поскольку это текущая технология доступа к данным Microsoft, я подозреваю, что поставщики будут обновлять свой поставщик .NET чаще, чем поставщик OLE DB.Поэтому, если при реализации возникают проблемы с производительностью, поставщик .NET, скорее всего, будет исправлен, в то время как его поставщик OLE DB может быть исправлен не так быстро (или вообще).Кроме того, вы получаете гораздо больше гибкости с .NET-провайдером, если вам это нужно (например, Entity Framework).Если вы хотите это с OLE DB, вам нужно будет использовать провайдера .NET для поставщиков OLE DB, который является еще одним уровнем поверх OLE DB (при условии, что он даже будет работать, чего я не знаю).