2012-08-27 6 views
5

Estoy utilizando un componente de terceros que acepta datos de 25 KB como máximo a la vez. Estoy pasando una matriz de objetos a este componente de terceros desde mi aplicación.Regulación de datos C#

Sin embargo, la cantidad de datos que escribe mi aplicación es mucho más de 25 KB. Estoy recuperando datos de la base de datos y llamando al componente directamente.

He agregado la referencia del componente en la aplicación. Los datos que paso al componente son una matriz de objetos que contiene tipos primitivos y no primitivos.

¿Cómo puedo implementar la aceleración de datos aquí?

+2

Agregue más información, por ejemplo, cómo se envían los datos al componente, es decir, qué tipo de comunicación es. –

+1

¿Cuál es la arquitectura y el método de comunicación? – ChrisBint

+0

¿Qué tipo de objetos almacenas en la matriz, primitivos? –

Respuesta

5

Puede calcular el tamaño de una fila en su base de datos. Después de eso, cada vez que pasa algo, agrega ese tamaño a una variable. Al mismo tiempo está usando un cronómetro que se ejecuta. Simplemente verifique si el Stopwatch.EllapsedSeconds tiene más de 1 segundo. En caso afirmativo, reinicie el cronómetro y restablezca su variable con el tamaño que ya aprobó. Si no, verifica si el tamaño que ya has aprobado (la cantidad de variable) es mayor a 25 KB. Si eso es cierto, llame al System.Thread.Thread.Sleep(Math.Max(1000 - StopWatch.EllapsedMilliseconds, 0)). Pero recuerda que tienes que hacer eso en un hilo adicional porque el sueño bloquea todo el hilo.

3

Debe implementar un búfer de datos entre su aplicación y el componente. La mejor manera de hacerlo es:

  • crea una clase que tiene su propia rosca interna,
  • en la parte pública de la interfaz de la clase poner en práctica el método de escritura que acepta una matriz de bytes y lo almacena en una queue
  • subproceso interno que graba hasta 25kb de datos de la cola the y duerme durante 1 segundo, menos el tiempo que le tomó escribir el fragmento.

También debe tener cuidado, si la secuencia de datos es continua y se produce a una velocidad> 25kbps, entonces produce más de lo que el componente puede consumir y su cola se desbordará.

2

Eche un vistazo al ejemplo de clase BufferedStream en MSDN. Debería poder adaptarlo para que escriba 25 KB máximo por segundo.

Cuando escribe en secuencia, especifica un tamaño de datos para leer/escribir, por lo que si dice escribir 25 KB y devuelve 24 KB, sabe que todavía puede escribir 1 K.

Si vuelve con 25 KB y todavía hay datos pendientes en el búfer, puede hacer un Thread.Sleep(1000) para asegurarse de que no exceda la cuota.