如何高效分块读写.NET中的Oracle BLOB大对象?

2026-04-24 16:270阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计807个文字,预计阅读时间需要4分钟。

如何高效分块读写.NET中的Oracle BLOB大对象?

相关专题:

Oracle BLOB太大,直接GetBytes()OutOfMemoryException怎么办

oracle的blob字段存gb级文件时,.net的oraclecommand.executescalar()oracledatareader.getbytes()会尝试一次性加载全部字节到内存,极易触发outofmemoryexception。这不是连接问题,是设计使然——getbytes()底层仍走内存缓冲。

必须改用流式分块读写,绕过内存峰值。核心是:不用byte[]承载全文,改用Stream逐段搬运。

  • 读取时,调用OracleBlob.GetStream()获取可读流(注意:需保持OracleConnection打开)
  • 写入时,先插入空BLOB(EMPTY_BLOB()),再用OracleBlob.SetStream()写入
  • 务必手动控制Buffer大小,推荐8192~65536字节;太小IO频繁,太大仍占内存

OracleBlob.GetStream()读BLOB时连接被意外关闭

OracleBlob.GetStream()返回的流强依赖底层OracleConnection状态。

阅读全文
标签:OracleNET

本文共计807个文字,预计阅读时间需要4分钟。

如何高效分块读写.NET中的Oracle BLOB大对象?

相关专题:

Oracle BLOB太大,直接GetBytes()OutOfMemoryException怎么办

oracle的blob字段存gb级文件时,.net的oraclecommand.executescalar()oracledatareader.getbytes()会尝试一次性加载全部字节到内存,极易触发outofmemoryexception。这不是连接问题,是设计使然——getbytes()底层仍走内存缓冲。

必须改用流式分块读写,绕过内存峰值。核心是:不用byte[]承载全文,改用Stream逐段搬运。

  • 读取时,调用OracleBlob.GetStream()获取可读流(注意:需保持OracleConnection打开)
  • 写入时,先插入空BLOB(EMPTY_BLOB()),再用OracleBlob.SetStream()写入
  • 务必手动控制Buffer大小,推荐8192~65536字节;太小IO频繁,太大仍占内存

OracleBlob.GetStream()读BLOB时连接被意外关闭

OracleBlob.GetStream()返回的流强依赖底层OracleConnection状态。

阅读全文
标签:OracleNET