在.Net中从Oracle获取clob字段的性能不佳

neo*_*ght 5 .net oracle odp.net clob devart

我试图从.Net中的oracle读取clob列,并观察到非常差的性能和大量的网络流量.

我尝试过ODP + OCI,devArt + OCI方式来访问具有相同结果的数据 - 在数据读取器中获取1000行需要大约20秒,并读取每行的clob值.

检查wireshark跟踪,结果是每次我尝试读取读取器中单行的clob字段时,在客户端和服务器之间发送了额外的多个tcp数据包.因此,对于1000行,这比仅查询一行慢1000倍.

同时,如果我在SQL Developer中运行相同的查询(我相信使用瘦jdbc驱动程序而不是oci),我会立即得到结果,包括clob值.它不会尝试查询每行的clob - 它可以一次性获取它们!

但我没有看到.net的瘦客户端.我怎样才能加快速度?请帮忙!

编辑:我的字段类型实际上是XMLTYPE存储为clob,而不是真正的clob.在它上面使用getClobVal可以将结果提高50%到10秒(1000行).但与此同时,Sql Developer立即返回结果,而不是在10秒内.

Cod*_*odo 1

您正确地观察到 Oracle 延迟了 LOB 的检索。因此,应用程序的性能受到网络往返时间的限制。

利用类InitialLOBFetchSize的属性OracleCommand(在 ODP.NET 中,请参阅文档),您可以告诉 Oracle 在初始检索行时检索部分 LOB。如果您的 LOB 不太长,这可能会产生很大的影响。