C# 从Oracle DB中提取100K图像的最快方法是什么?

C# 从Oracle DB中提取100K图像的最快方法是什么?,c#,oracle10g,blob,rdbms,relational-database,C#,Oracle10g,Blob,Rdbms,Relational Database,我考虑的选择是: 1个基于控制台的应用程序,用于将图像提取到windows文件系统 2个java应用程序,用于在基于unix的文件系统上提取图像 你能想到的任何其他方法,请告诉我。大约有101234条记录,每个BLOB列可能有一个介于1MB到6MB之间的文件。如果您想提高速度,我建议您使用PL/SQL存储过程将图像直接保存到文件中。它应该比外部程序快 DECLARE t_blob BLOB; t_len NUMBER; t_file_name VARCHAR2(100); t_output UT

我考虑的选择是:

1个基于控制台的应用程序,用于将图像提取到windows文件系统

2个java应用程序,用于在基于unix的文件系统上提取图像


你能想到的任何其他方法,请告诉我。大约有101234条记录,每个BLOB列可能有一个介于1MB到6MB之间的文件。

如果您想提高速度,我建议您使用PL/SQL存储过程将图像直接保存到文件中。它应该比外部程序快

DECLARE
t_blob BLOB;
t_len NUMBER;
t_file_name VARCHAR2(100);
t_output UTL_FILE.file_type;
t_TotalSize number;
t_position number := 1;
t_chucklen NUMBER := 4096;
t_chuck raw(4096);
t_remain number;
BEGIN
-- Get length of blob
SELECT DBMS_LOB.getlength (PHOTO), ename || '_1.jpg'
INTO t_TotalSize, t_file_name FROM DEMO WHERE ENAME ='moon';
t_remain := t_TotalSize;
-- The directory TEMPDIR should exist before executing 
t_output := UTL_FILE.fopen ('TEMPDIR', t_file_name, 'wb', 32760);
-- Get BLOB 
SELECT PHOTO INTO t_blob FROM DEMO WHERE ENAME ='moon';
-- Retrieving BLOB
WHILE t_position < t_TotalSize 
LOOP
DBMS_LOB.READ (t_blob, t_chucklen, t_position, t_chuck);
UTL_FILE.put_raw (t_output, t_chuck);
UTL_FILE.fflush (t_output);
t_position := t_position + t_chucklen;
t_remain := t_remain - t_chucklen;
IF t_remain < 4096
THEN
t_chucklen := t_remain;
END IF;
END LOOP;
END;

检查此项

我认为Java/C的选择不会对时间产生任何重大影响。使用你最舒服的东西。运行所需的时间更可能受到磁盘或网络带宽的限制。如果这是一次性的:这里可能最快的方法是尽可能做最简单的事情,然后单击“更快地执行…”。。。任何更优雅/复杂的东西都需要开发人员付出更多的努力。我确实选择了这个作为答案。我也一直在asktom.oracle.com上阅读。这种方法的问题是,我需要访问*nix环境中的一个文件夹,而我的DBA不愿意将它授予我。再次感谢您的贡献。