Ecco lo scenario: recentemente mi è stato assegnato il compito di scrivere un'interfaccia di comunicazione per dispositivi seriali rs232 per la nostra applicazione esistente. Questa applicazione ha classi di base in atto per fare la comunicazione reale. Fondamentalmente tutto ciò che faccio è accettare un array di byte nella mia classe, quindi elaborarlo.È una cattiva idea convertire gli array di byte in stringhe e analizzare le espressioni regolari?
Parte del problema è che l'array di byte consegnato non può essere più di 1000 byte alla volta, ma potrebbero esserci più dati in attesa di entrare che appartengono a quella transazione. Quindi non ho idea se ciò che mi è stato consegnato sia completo. Quello che sto facendo è convertire quell'array da 1000 byte in una stringa e inserirla in un buffer. Questo buffer quindi esegue un'espressione regolare per vedere se ciò che è stato aggiunto crea una transazione completa. So che è completo se corrisponde a una firma particolare (fondamentalmente una serie di codici di controllo all'inizio e alla fine). Questo buffer aggiungerà i dati solo fino a 3 volte prima di rinunciare se non viene trovata alcuna corrispondenza in caso di dati spazzatura che arrivano e nessuna corrispondenza è mai possibile. Questo non è un dispositivo ad alto volume di dati, quindi non mi aspetto che tonnellate di dati continuino a riversarsi costantemente. E l'espressione regolare viene eseguita sempre, al massimo, 3000 caratteri.
Finora funziona piuttosto bene, ma la mia domanda è che le espressioni regolari sono terribili per questo? Ci sono delle ramificazioni riguardo alle prestazioni per quello che le sto usando? La mia comprensione è che le espressioni regolari sono in genere dannose per grandi volumi di dati, ma ritengo che questo sia piuttosto limitato.
hai un esempio di codice esistente che stai utilizzando ..? questo è piuttosto astratto per me, dal momento che si possono usare molti metodi o tecniche diverse per leggere byte ad esempio 'ReadAllBytes' oppure i byte vanno letti in Chunk ecc. hai fatto anche una ricerca su google per altri esempi esistenti? Sono sicuro che non sei il primo ad averlo provato, quindi sostanzialmente quello che sto dicendo è "Non reinventare il WHeel" – MethodMan
Come stai "convertendo quell'array da 1000 byte in una stringa"? Si noti che non tutti gli array di byte sono stringhe valide. –
A seconda di quanto siano complessi e prevedibili i codici di controllo, prenderei in considerazione solo l'osservazione diretta dei valori dei byte sia più facile che più veloce. Ma non c'è niente di intrinsecamente sbagliato nel tuo approccio. –