5 segundos de retraso de la llamada Clipboard.SetText

Tengo una llamada simple del sistema heredado, mis llamadas de aplicación .NET win muy simples

Clipboard.SetText("small data portion") 

Esta llamada dura 5 segundos. Las próximas llamadas de SetText funcionan bien.

La parte más importante (en mi humilde opinión) del código de la persona que llama (VB6):

SAAttr.nLength = Len(MySAAttr)
SAAttr.bInheritHandle = 1
SAAttr.lpSecurityDescriptor = 0

CreatePipe StdOutR, StdOutW, SAAttr, 0&
SetHandleInformation StdOutR, HANDLE_FLAG_INHERIT, 0&
CreatePipe StdInR, StdInW, SAAttr, 0&
SetHandleInformation StdInW, HANDLE_FLAG_INHERIT, 0&

start.cb = Len(start)
start.hStdOutput = StdOutW
start.hStdError = StdOutW
start.hStdInput = StdInR
start.dwFlags = STARTF_USESTDHANDLES
ret = CreateProcess(0&, cmdline, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS + _    
      CREATE_NO_WINDOW, 0&, 0&, start, proc)

ret = WaitForSingleObject(proc.hProcess, pTimeout)
CloseHandle StdOutW

Preguntas 2:

  • ¿Cuál es la razón del retraso del portapapeles?

  • Cómo solucionarlo (pero el proceso de llamada debe: bloquearse: la llamada de llamadas que no bloquean funciona bien)?

código de ejemplo:

Dim start1 As DateTime = Now
Clipboard.SetText("simple data")
Dim start2 As DateTime = Now
Clipboard.SetText("simple data")
Dim start3 As DateTime = Now
Clipboard.SetText("simple data")
MessageBox.Show( (start2 - start1).ToString() & vbCrLf & _
   (start3 - start2).ToString() & vbCrLf & _
   (Now - start3).ToString() & vbCrLf )

Resultados:

00: 00: 05.0130000

00: 00: 00

00: 00: 00

preguntado el 24 de agosto de 12 a las 09:08

Recientemente me enfrenté a un problema muy similar, espero que alguien responda ... -

Supongo que en realidad está cronometrando el retraso de la llamada WaitForSingleObject, no el retraso del portapapeles. Un inicio en frío de .NET puede tardar fácilmente 5 segundos. La próxima vez que ejecute el proceso obtendrá un buen comienzo, una gran diferencia. La única solución es un disco más rápido o calentar artificialmente el caché del sistema de archivos. -

@HansPassant: No es un problema con la máquina. -

@HansPassant: Sucede siempre. -

Gracias, eso aclara bastante las cosas. Entonces, no parece que haya un problema de VB6 aquí. -

1 Respuestas

Tuve el mismo problema durante años con VB6 cuando usaba el portapapeles para transferir datos a Excel cuando Outlook y/o Word se estaban ejecutando.

El problema es con Office; necesitas deshabilitar el copiar varios elementos hacia/desde el portapapeles para acelerarlo.

https://support.microsoft.com/en-ca/help/2817672/macro-takes-longer-than-expected-to-execute-many-individual-copy-and-p

Espero que esto ayude.

respondido 27 nov., 18:19

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.