标题不言自明。
我正在处理大小接近 2MB 的文件/数据。
SqlDataReader.GetBytes应该是您正在寻找的。
如果您需要数组中的字节,那么所有方法几乎都是相同的,因为您必须将结果流中的所有字节流式传输到数组中(SqlClient 类将为您执行此操作)。
存储过程或数据库表中的字段是否具有 varbinary 输出参数并不重要,尽管存储过程会稍微快一些,因为您没有关于要返回的结果集的架构信息。但是,与您要返回的数据的大小相比,这可以忽略不计。
如果您真的想要提高性能,最好使用设置了 SequentialAccess 的 DataReader,然后在读取器上为返回的字段调用 GetBytes。通过调用它,您只提取您需要的字节并且可以分块处理数据。
这很重要,因为您在尝试分配大小为 2MB 的字节数组时肯定会遇到问题。一般来说,开始分配大的连续内存块(数组就是这样)是一个坏主意,并且会降低性能。在可能的情况下,以较小的块处理数据。