Diskuze: filtrace dat z queue
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Co to znamena aplikace je pomala ? Pokud vim tak seriova linka je schopna
zpracovavat okolo 0,5 MB/s a prumerny procesor je urcite schopny zpracovavat
daleko vic nez 0,5 MB/s .
pokud pocitam spravne tak 12kB zpracovavas 3 minuty. Pokud tam nedelas super analyzy tak mas spatne napsany ten algoritmus zpracovani. Asi by bylo vhodne ho sem napostovat jinak ti nikdo nedokaze poradit kde je problem.
Bez kódu ti fakt nikdo nepomůže, ale mně třeba zaráží, že
"projíždíš" frontu-proč?
Počítám že frontu tam máš jakobuffer kvůli tomu že zpracování dat
trvá déle než jejich příjem a pak si přece taháš prvek z čela fronty a
ten zpracuješ - vytažení dvou čísel (souřadnice grafu) bude trvat - ať
nežeru - mikrosekundu, ale spíš míň
Tady přikládám kód, kde mám příjem dat, a zobrazení v grafu. Už tohle trvá strašně dlouho. Nejsem žádný zkušený programátor, proto uvítám rady, kde by se dalo něco optimalizovat.
Jsem moc líný na to, abych si to pročítal úplně celé, nicméně jsem si všiml, že značnou část zpracování tvých dat děláš v try bloku, který umí kód docela zpomalit. Nešlo by to ošetřit nějak jinak?
Mám otázku :
opravdu je to tvoje aplikace?
Nebo jsi to celé (nebo část) převzal- ztřeba z nějakého SDK (asi
měřáku , nebo měřící karty)?
Pokud je to ten druhý případ, tak by to mělo být funkční a chybu bych
hledal v tvojich úpravách, pokud jsi nějaké dělal.
V druhém případě bych to dělal asi jinak, ale neznám protokol toho
zařízení, co ty data posílá, tím myslím formát zprávy, jestli a jak
velké mezery jsou mezi paketama.
pokud ti chodi data skutecne kazdou 1ms tak se nediv ze je to tak pomale kdyz se pokousis neustale prekreslovat UI. pro tvoje potreby staci aby se data vykreslily tak jednou za 30 ms. To same se souborem. Pokud mas stary plotnovy HDD tak zapisovat jeden znak kazdou milisekundu zasekne system.
private List<int> _localBuffer = new List<int>();
private DateTime _lastUpdate = DateTime.MinValue;
private List<int> _fileLogBuffer = new List<int>();
private void DataProcessing(byte[] data)
{
int capRaw = (data[0] * 256) + data[1];
_localBuffer.Add(capRaw);
if ((DateTime.Now - _lastUpdate).TotalMilliseconds > 30)
{
int capAverage = (int)Math.Round(_localBuffer.Average());
_localBuffer.Clear();
_fileLogBuffer.Add(capAverage);
CapWrite("Relative Capacitance: " + capAverage.ToString());
DrawChart1(pointindex, capAverage, 0);
pointindex++;
if (_fileLogBuffer.Count > 10)
{
using (StreamWriter sw = File.AppendText(path))
{
foreach (int value in _fileLogBuffer)
sw.WriteLine(value.ToString());
}
_fileLogBuffer.Clear();
}
}
}
dal toto staci udelat jen jednou a ne v kazdem vykresleni:
chart1.ChartAreas["ChartArea1"].AxisY.Maximum = 4000;
chart1.ChartAreas["ChartArea1"].AxisY.Minimum = 1000;
chart1.ChartAreas["ChartArea1"].AxisY.Title = "C[raw]";
chart1.ChartAreas["ChartArea1"].AxisX.Title = "samples";
dal do ControllLoop do smycky dat nejake thread.Sleep jinak to zbytecne spotrebovava strasne moc CPU (nebo pouzit nejaky synchronizacni prostredek nebo nejlip nahradit BlockingCollection)
dal Queue<> neni bezpecne pouzivat mezi ruznyma vlaknama presne tak jak to delas ty. doporucuju nahradit BlockingCollection nebo synchronizovat pristup.
a dal je tam podle me spatne zpracovani tech paketu protoze ty pocitas stim ze maji fixni delku ale v kodu mas poznamku ze ta delka muze byt variabilni.
eh... stačily mi 2 věty, dále jsem popravdě nečetl.. vezmu tedy reakci na první 2 věci co mě zarazily...
... asi by to chtelo pri studiu cist vic nez 2 vety.
OH bože ty zase krmis.. Baťovci raději měli zůstat u dělani cviček...
1)nejdříve meles o HW a plotnovem disku a zápisu na fyzické medium, když ti povim ze je to hloupost, tak to raději stocis k SW implementaci.. Nebudu zde ani mluvit o tom, ze OS určité při zápisu žádný index obsahu souboru nedělá, zaindexuje si tak maximálně path. TY vytizenej počítači..
A ted mi odpovez ty, proč s lidmi jako ty ztracim čas.. ? Už mi tu jen chybí místní CEO co přijde jednat z pozice moci a vyhrožovat nějakým banem, jako bych se mel z toho asi zhroutit.
Sakra, nenapsal jsem.moc znaku za sekundu, abych ITnetworku nezasekal systém..
ale ackoli je to paradoxni, tak mnou navrzena uprava kodu stale vyresi
autoruv problem
to ze je batovka na**** souhlasim, ale podle pohovoru absolventu v aktualni a
minule firme na tom ostatni skoly nejsou o moc lip
Zobrazeno 14 zpráv z 14.