Estou carregando 50.000 registros em 15 ou mais segundos usando Array Binding no ODP.NET
Ele funciona invocando repetidamente um procedimento armazenado que você especifica (e no qual você pode fazer atualizações/inserções/exclusões), mas passa os vários valores de parâmetro do .NET para o banco de dados em massa.
Em vez de especificar um único valor para cada parâmetro para o procedimento armazenado, você especifica um array de valores para cada parâmetro.
O Oracle passa as matrizes de parâmetros do .NET para o banco de dados de uma só vez e, em seguida, invoca repetidamente o procedimento armazenado que você especifica usando os valores de parâmetro que você especificou.
http://www.oracle.com/technetwork/issue-archive/2009/09-sep/o59odpnet-085168.html
/Damian