Problema de rendimiento de la subida de Android a la unidad de red (porcentaje de samba)

Tengo un problema cuando subo una imagen de 100kb a compartir samba con JCIFS de mi tableta, se tarda unos 10-20 minutos (antes de cambiar mi buffer de 1024 to 20971520 se tardó casi 6 horas), pero no da ningún efecto Ya para aumentarlo

No es el problema de conexión como lo había probado con ES File donde Subió mi foto inmediatamente

 private class MyCopy extends AsyncTask<String, String, String> { String z = ""; String username = "", password = "", servername = "", filestocopy = ""; @Override protected void onPreExecute() { username = edtusername.getText().toString(); password = edtpassword.getText().toString(); servername = "smb://" + edtservername.getText().toString(); filestocopy = editdir.getText().toString(); } protected String doInBackground(String... params) { // String buffer; // buffer = setingPreferences.getString("buffer", ""); File file = new File(filestocopy); String filename = file.getName(); NtlmPasswordAuthentication auth1 = new NtlmPasswordAuthentication( servername, username, password); try { SmbFile sfile = new SmbFile(servername + "/" + filename, auth1); if (!sfile.exists()) sfile.createNewFile(); sfile.connect(); InputStream in = new FileInputStream(file); SmbFileOutputStream sfos = new SmbFileOutputStream(sfile); byte[] buf = new byte[20971520]; //(parseInt(buffer)) int len; while ((len = in.read(buf)) > 0){ sfos.write(buf, 0, len); } in.close(); sfos.close(); z = "File copied successfully"; } catch (Exception ex) { z = z + " " + ex.getMessage().toString(); } return z; } } 

    El tamaño del búfer no debe hacer una diferencia notable, pero definitivamente no debe ser de 20M. Utilice algo como 4k en su lugar.

    ¿Estás seguro de que es la transferencia de archivos que está tomando tanto tiempo? No hay razón para que 100k deba tomar más de unos segundos como máximo. ¿Ha intentado poner declaraciones de registro entre cada paso, incluyendo antes y después de las llamadas de autenticación, createNewFile() y connect() para comprobar si son el cuello de botella?

    Además, creo que debería estar copiando bytes mientras que la longitud de lectura es >= 0 lugar de estrictamente > 0 , ya que -1 señala el final de la secuencia, no 0.

    Has probado

    new SmbFile("username:password@server/")

    En lugar de utilizar NTLM? También puede ser un problema de DNS, así que intente

    jcifs.Config.setProperty("resolveOrder", "DNS");

    Si ninguno de ellos funciona, puede intentar BufferedOutputStream con su SmbFileOutputStream .

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.