PHP vs C # prestazioni

0

Ho un'applicazione che è un'applicazione di console di parte scritta in C # e un'applicazione web PHP in parte.

L'applicazione della console si connette a più dispositivi seriali e legge i dati relativi all'umidità e alla temperatura in un essiccatore per cereali. [L'applicazione] memorizza quindi le informazioni in un database MySQL.

Il PHP legge il database MySQL e mostra le informazioni all'utente (semplice).

Ho anche scritto uno script PHP per inviare email / sms all'utente se una delle temperature di umidità raggiunge i livelli di allarme (i livelli di allarme vengono letti dal dispositivo e memorizzati nel database MySQL).

Attualmente, inserisco nella pagina PHP ogni "aggiornamento" dal dispositivo (10 secondi) e controllo ogni valore rispetto ai suoi limiti. Se è necessario un allarme, lo invio e aggiorno il database indicando che è stato inviato un allarme.

Questo sembra (pseudo codice)

IF moisture IS GREATER THAN moisture_high_critical_limit THEN
  IF moisture_high_critical_alarm_has_been_sent IS FALSE THEN
    SEND_ALARM();
    moisture_high_critical_alarm_has_been_sent = TRUE;
  END IF
ELSE IF moisture IS GREATER THAN moisture_high_warning_limit THEN
  IF moisture_high_warning_alarm_has_been_sent IS FALSE THEN
    SEND_ALARM();
    moisture_high_warning_alarm_has_been_sent = TRUE;
  END IF
ELSE IF moisture IS LESS THAN moisture_low_critical_limit THEN
  IF moisture_low_critical_alarm_has_been_sent IS FALSE THEN
    SEND_ALARM();
    moisture_low_critical_alarm_has_been_sent = TRUE;
  END IF
ELSE IF moisture IS LESS THAN moisture_low_warning_limit THEN
  IF moisture_low_warning_alarm_has_been_sent IS FALSE THEN
    SEND_ALARM();
    moisture_low_warning_alarm_has_been_sent = TRUE;
  END IF
END IF

L'istruzione IF sopra riportata viene ripetuta per tutte le letture di temperatura e umidità dal dispositivo, che possono essere diverse.

Questo tipo di elaborazione dovrebbe verificarsi nella mia applicazione Console? Quindi se è necessaria una notifica di allarme, inviare alla pagina solo per inviare l'e-mail / SMS?

L'elaborazione di queste informazioni nell'applicazione console ridurrà il mio numero totale di handshake con il database MySQL. Ma se il database MySQL è ospitato localmente questo avrà un impatto considerevole?

Finirò il benchmark di entrambi (se sembra che l'elaborazione nell'applicazione console sia in realtà l'approccio giusto), tuttavia c'è un sacco di codice su cui eseguire il porting quindi ho pensato di venire qui e chiedere prima.

    
posta rlemon 13.09.2011 - 16:22
fonte

3 risposte

14

Dalla tua descrizione sembra che la tua app esegua molto DB e altro traffico di rete. Questo dovrebbe prendere più tempo rispetto all'esecuzione del codice di cui sopra qualche milione di volte, sia in PHP che in C #.

Ti suggerisco di profilare la tua app per prima, per vedere dove i veri colli di bottiglia sono la tua app passa la maggior parte del tempo, quindi concentrarsi su queste aree. In genere, ottimizzando il modo in cui si esegue una query / aggiornamento del DB (ad esempio riducendo al minimo il numero di roundtrip al DB eseguendo aggiornamenti batch anziché serie di aggiornamenti singolari ogni volta che è possibile) si risparmia molto più tempo rispetto all'ottimizzazione del tempo del processore locale.

    
risposta data 13.09.2011 - 16:26
fonte
3

Sono d'accordo con @ Péter Török riguardo ai punti di ottimizzazione, ma nel tentativo di fornire una piccola ottimizzazione del codice potresti prendere in considerazione Windows Workflow Foundation per C #. È stato progettato pensando proprio a questo tipo di controllo del flusso ottimizzato. Attualmente lo stiamo impiegando per effettuare determinazioni sui dati ed eseguire inserimenti di dati, eseguire notifiche, ecc. In base ai risultati di un'analisi dei dati.

    
risposta data 13.09.2011 - 16:34
fonte
1

Dal punto di vista delle prestazioni se è possibile interrogare il database o un file di configurazione per i valori critici e quindi pre-elaborare i dati in entrata prima che vengano inviati al database, allora si dovrebbe avere un sensore e un codice ad alte prestazioni. Questo tipo di logica condizionale non dovrebbe richiedere molto tempo e se vuoi aumentare la velocità puoi sempre farlo ricodificare in un linguaggio compilato. È possibile inviare un messaggio SMTP dal codice quando il sensore rileva un set di dati non valido.

Avrei suggerito di guardare un trigger MYSQL Insert per eseguire la logica, ma i riferimenti MYSQL che ho consultato suggerivano che l'uso di un'interfaccia SMTP per inviare automaticamente e-mail dal trigger del server o dalla stored procedure non era così raffinato come le offerte di Microsoft o ORACLE . Forse questo è qualcosa da considerare per il futuro se le tue esigenze crescono e desideri avere sensori meno intelligenti distribuiti in sedi remote per estrarre / spingere i dati.

    
risposta data 19.09.2011 - 15:43
fonte

Leggi altre domande sui tag