主要代码如下:
OracleDataReader reader;
略。
    while (reader.Read())
                {
                   // fbyte = (byte[])reader[0];
                    Oracle.DataAccess.Types.OracleClob clob = reader.GetOracleClob(0);
                    byte[] blob = new byte[clob.Length];
                    reader.GetBytes(0, 0, blob, 0,(Int32) blob.Length);
                    
                                       char[] cbuffer = new char[clob.Length];
                    fbyte = new byte[clob.Length];
                    
                   
                    while ((actual = clob.Read(cbuffer, 0, cbuffer.Length)) > 0)  //在这里读一个6M大小的文件 ,会有1分钟,但同事用JAVA只要13秒
                    {
                       
                        i++;
                        string temps = new string(cbuffer, 0, actual);
                        base64Str = base64Str + temps;
                                            }

解决方案 »

  1.   

    首先要注意,对于 base64Str ,应该定义为 StringBuilder 而不是 String。
      

  2.   

    另外,如果你的第一段读取代码可以,为什么又去读取一遍 clob 呢?
      

  3.   

    楼上大哥:现在的问题是clob.Read(cbuffer, 0, cbuffer.Length))  这一段时间会很久
      

  4.   

    char[] cbuffer = new char[clob.Length];
                        fbyte = new byte[clob.Length];
                        
                       
                        while ((actual = clob.Read(cbuffer, 0, cbuffer.Length)) > 0)  //在这里读一个6M大小的文件 ,会有1分钟,但同事用JAVA只要13秒
                        {
                           
                            i++;
                            string temps = new string(cbuffer, 0, actual);
                            base64Str = base64Str + temps;
                                                } 
    改为:
            base64Str += Encoding.Default.GetString(blob);