Idle FSW = CPU 13-14%. Hay alguna clase con otra lógica que no consuma tanto?

Iniciado por z3nth10n, 7 Julio 2017, 22:25 PM

0 Miembros y 1 Visitante están viendo este tema.

z3nth10n

Hola buenas,

perdonad que escriba así el título, pero es que si no cabía, y la pregunta fundamental era esa, la de saber de si hay alguna clase o forma de inicializar  la clase FileSystemWatcher para que no haga tanto uso de CPU cuando no sucedan cambios. A ver, tener, tiene sentido, ya que mientras que no se haga cambios lógicamente, FSW estará constantemente buscando en directorios y subdirectorios por si hay algún cambio.

El problema está precisamente, en cuantas veces busque en un segundo cambios, ya que si hablasemos de que se revisa cada 10 segundos, pues seguramente, no hubiese tanto consumo de CPU, lo que pasa que esta clase está hecha para eso, para detectar cambio a cambio, a mi me da igual si hay 20 cambios en una hora, la cosa es que me notifique, aunque haya un delay de 5 segundos.

Por ello, tengo la opción de construirme yo mi propia clase, y hacer dicha hazaña, pero me gustaría saber si hay alguna clase ya en .NET que haga esto, o algún recurso del vuestro el cual no tenga localizado para usarlo en mi API, ya que es deprimente ver un consumo del 15% sin hacer nada, en el Editor de Unity. Así a parte, de ahorrarme trabajo, no tengo que andar optimizando y os puedo dar un poco de promoción por la API, of course, hay mención pal que lo quiera.

Que feo me está quedando el post.... :xD

Ya no hablemos pues de crear 6 FSW, entonces tendríamos un consumo del 90%?

A ver que me podéis decir sobre esto.

Gracias y...
Un saludo.

PD: https://stackoverflow.com/questions/26939734/c-sharp-filesystemwatcher-high-cpu-load-when-no-change-happen-to-directory
Esta es precisamente la duda que yo tengo, pero no hay respuesta, por si queréis llevaros algún puntín.

Interesados hablad por Discord.

Eleкtro

Hola.

Lo que describes probablemente sea un problema aislado que estás sufriendo tú en tu escenario (o dicho de otra manera, 1 usuario entre 1.000.000) por culpa de alguna causa desconocida e inconclusa... de dificil resolución por la ausencia de información que has entregado en ese sentido, ya que te has limitado a hacer presunciones, hecharle la culpa a "X" sin tan siquiera mostrar tu código.

Por si te sirve de algo, llevo años utilizando dicha clase y nunca encontré un problema de alto consumo de CPU. El problema que se describe en el post que has linkeado de StackOverflow es irreproducible en mi caso, pues un FileSystemWatcher que monitorice un directorio con +13.000 archivos, incluyendo subdirectorios vacios y llenos, no supera los 0,1% de CPU (en IDLE) en Windows 10 x64, y solo llega a approx. 0,10% cuando hay cambios en el directorio, ya sea cambios/creación de 1 archivo o de miles en un intervalo corto de tiempo; el programa lo compilé bajo modo Neutro en .NET 3.5, 4.0, 4.5 y 4.6 y los resultudados observados fueron siempre los mismos, es decir, un consumo de CPU medo del 0,10% cuando hay cambios en el directorio... con un Ryzen 7 1700X.

Lo único que te puedo recomendar es que depures bien tu código de arriba a abajo para buscar posibles anomalias que puedan estar causando ese elevado uso de CPU. Podrías empezar por crear un nuevo proyecto en Visual Studio (nada de escribir el código en Unity para probar el rendimiento, ya que ese podría ser precisamente el problema en tu caso, Unity), añade un FileSystemWatcher y realiza las observaciones necesarias en las herramientas de diagnóstico de rendimiento de Visual Studio (Diagnostics Tools) o en tu herramienta preferida de Profilling.

Saludos!