Разница в скорости между собственным OLE DB и ADO.NET - PullRequest
4 голосов
/ 07 апреля 2010

Я ищу предложения, а также любые ориентиры или наблюдения, которые есть у людей. Мы стремимся переписать наш уровень доступа к данным и пытаемся выбрать между родным C ++ OLEDB или ADO.NET для соединения с базами данных. В настоящее время мы специально ориентируемся на Oracle, что означает, что мы будем использовать поставщика Oracle OLE DB и ODP.NET.

Требования: 1. Все приложения будут в управляемом коде, поэтому для использования родного C ++ OLEDB для работы потребуется C ++ / CLI (нет способа замедлить PInvoke). 2. В будущем приложение должно работать с несколькими базами данных, в настоящее время только для Oracle.

Вопрос: 1. Будет ли эффективнее использовать ADO.NET для достижения этой цели или использовать встроенную O ++ DB C ++, обернутую в интерфейс Managed C ++, для доступа к управляемому коду?

Буду очень признателен за любые идеи, помощь или места в Интернете.

1 Ответ

1 голос
/ 08 апреля 2010

Я не думаю, что можно дать один ответ, который обычно применим в этой ситуации, учитывая тот факт, что вы хотите общее решение для не только 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 (при условии, что он даже будет работать, чего я не знаю).

...