OLEDB намного быстрее, чем SQLClient, ЗА ИСКЛЮЧЕНИЕМ, когда доступ осуществляется через ADO.NET. Драйверы для OLEDB написаны в собственном неуправляемом коде, однако, когда вы получаете доступ к этим драйверам через ADO.NET, вам необходимо пройти несколько уровней (включая уровень абстракции и уровень взаимодействия COM). Уровень абстракции обеспечивает управление ресурсами, например управление дескрипторами памяти, чтобы обеспечить правильную сборку мусора, изменение типов данных и параметров на типы .NET и преобразование буфера oledb в привязки строк и столбцов. Уровень взаимодействия COM обеспечивает передачу сообщений из .NET в COM и наоборот, включая блокировку / разблокировку / преобразование указателей.
Не слушайте никого, кто выдвигает ложные обвинения в отношении производительности OleDB, не понимая, как они тестировали его и какую среду использовали (управляемый код или управляемый код). Единственное, что замедляет работу OleDB, - это объем работы, необходимый для правильной работы нативного кода с управляемым кодом. Также имейте в виду, что библиотека SqlClient .NET имеет собственную систему слежения и НЕ является РОДНОЙ библиотекой .NET, как думает большинство людей. Библиотеки SqlClient в .NET используют классы SNINativeMethodWrapper и SNIPacket, которые являются оболочками, которые размещают данные между неуправляемым кодом (sqlncli.dll) и управляемым кодом .NET. Это недокументированная истина и причина, по которой .NET SqlClient никогда не сможет выполнить OleDB при использовании OleDB в собственном неуправляемом коде.
В итоге, если вы используете 100% управляемый код, вы получите лучшую производительность от System.data.SqlClient. Если у вас смешанная среда, вы получите гораздо более высокую производительность, общаясь с OleDB напрямую или с sqlncli.dll (SQL2005) или sqlncli10.dll (SQL 2008). Имейте в виду, что Microsoft обновляет и OleDB, и ODBC, и последние драйверы OleDB действительно взаимодействуют с новейшими неуправляемыми собственными клиентскими библиотеками SQL. Microsoft рекомендует использовать OleDB в неуправляемых приложениях, когда требуется высокая производительность.
Дополнительные сведения см. В разделе «Электронная документация по SQL Server 2008 \ Database Engine \ Development \ Руководство разработчика \ Программирование собственного клиента SQL Server 2008 \ Собственный клиент SQL Server 2008 (OLE DB)".