Výkon kritické GUI aplikace (Windows, Linux)

hlasů
5

Byl jsem za úkol aktualizovat řadu aplikací, které jsou výkonné kritické VB.NET aplikace, které v podstatě jen sledovat a vrátit síťové statistiky. Mám jen tři požadavky: převést na C #, aby to rychle, a učinit z něj stabilní

Jedna námitka je, že „může“ migrovat z platformy .NET pro linux „brzy“

Budu zodpovědný za zachování těchto aplikací v budoucnu, takže bych chtěl dělat toto právo. Rozhodl jsem se refaktorovat tyto aplikace podle vzoru MVP, takže mohu pořádně jednotka testovat sakra z tohoto špatného chlapce. Ale já jsem na mysli, protože jsem byl s použitím MVP, že bych mohl také dělat výpočetně náročné věci v nativním C / C ++ kódu, zatímco GUI by být provedeno s .NET formulářů nebo Qt nebo cokoliv jiného.

otázky:

  1. má smysl dělat GUI v WinForms ale drahé věci v nativním, neřízeným C / C ++?

  2. případná doporučení pro dobrou křížové platformě okenního kitu, který by se vešel na scénář popsaný výše?

Položena 13/08/2008 v 15:00
zdroj uživatelem
V jiných jazycích...                            


12 odpovědí

hlasů
5

Za prvé, chtěl bych dát nějaký čas na vyzkoušení několik VB.NET na C # konvertorů . Vy jste v podstatě přenesení syntaxi, a neexistuje žádný důvod k tomu, že stranu, pokud nemusíte. Jistě, budete muset uklidit, co vychází z měniče, ale je to mnohem lepší, než konverze podle ruce.

Nyní, pokud jde o vaše otázky:

1) má smysl dělat GUI v WinForms ale drahé věci v nativním, neřízeným C / C ++?

Ještě ne. Počkat, až jste udělal konverzi, a pak zjistit, kam vlastně tráví svůj čas. Neexistuje žádný důvod, aby skok do směšovací C / C ++ s C #, až zjistíte, že je to nutné. Možná zjistíte, že klesá do nebezpečného C # je dostačující. I to může být zbytečné. Dalo by se stačí za účelem optimalizace algoritmů. Zjistěte, jaké jsou vaše překážky jsou, a pak se rozhodnout, jak je opravit.

2) případná doporučení pro dobrou křížové platformě okenního kitu, který by se vešel na scénář popsaný výše?

Já bych se díval do mono pro jistotu. To je opravdu to nejlepší, co můžete udělat, pokud se chystáte s C #. Je to do značné míry buď mono nebo jiný přepis v jiném jazyce, když / pokud se pohybujete na Linux.

Odpovězeno 13/08/2008 v 20:47
zdroj uživatelem

hlasů
4

1) Předčasné optimalizace je zlo. Realizovat své „drahé věci“ v jazyce C # a zjistit, zda je třeba jej refaktorovat. Nebo alespoň nastavit test, který vám umožní určit, to.

2) Yowch. UI multiplatformní. Já bych se smířit s „může“ věci. Přibít na lasice dolů; Jak lze zajistit, aby rozhodnutí o návrhu, aniž by věděl, co jste navrhování? Máte-li jít s čistou implementaci .NET, budou si stěžovat, pokud máte (minimálně) refactor do práce v Mono? Pokud si ho vytvořit v Javě, budou naštvaný, že to vypadá ošklivě jako peklo a uživatelé si stěžují, že nemohou najít svůj soubor s příponou EXE mezi všemi těmi .jars?

Odpovězeno 13/08/2008 v 15:19
zdroj uživatelem

hlasů
3

1) Ne nutně. Myslím, že by bylo správné říci, že je to asi stojí za psaní backend kód v C ++, bez ohledu na důsledky výkonu. I když nemůžete svázat své vyšší okna dolů na spínači platformě, by bylo rozumné, že jste se připravovat pro tento případ, protože typy řízení mají tendenci měnit své mysli hodně bez zjevného důvodu (nebo varování); i když se rozhodnete přejít teď, to neznamená, že nebudou rozhodnou přejít šest měsíců od nynějška. Psaní svou logiku v jazyce C ++ se s vědomím, že je to možné, i když složitější, mohou vytvořit svůj život podstatně jednodušší později.

2) Ve skutečnosti ne. Existují „řešení“, jako je wxWindows a GTK #, ale často jsou buggy, nebo obtížné získat správně, nebo jim chybí něco důležitého na jedné platformě nebo jiný. Obvykle také zamknout vás do UI nejnižším společném jmenovateli (tj všeobecné kontroly funguje dobře, ale můžete zapomenout někdy dělat něco zajímavého - WPF, například - s ním). UI je snadné psát, takže myslím, že pokud píšete svou logiku v něco, co je přenosný, mělo by to být triviální záležitost srazit dohromady několik platformě specifické UIS.

Odpovězeno 13/08/2008 v 15:28
zdroj uživatelem

hlasů
2

Možná budete chtít podívat do využitím Mono . Jedná se o open source verze .NET, který běží na mnoha plateforms ... Linux, Mac, Solaris, Windows, atd ..

Nyní o kódování váš drahý věci v C / C ++. Zde je článek, který dělá velmi dobrou práci, které vysvětlují rozdíly mezi C / C ++ a C # výkonnosti .

Odpovězeno 13/08/2008 v 15:34
zdroj uživatelem

hlasů
2

Ne, to nemá smysl dělat „drahé věci“ v jazyce C / C ++. Potenciální (as největší pravděpodobností minor) zlepšení výkonu nikdy převáží svou produktivitu bytí abject, nemocný vtip v porovnání s C #. Opravdu. Není to ani zdaleka.

Pročtěte si to (a všechna místa odkazoval se na uvnitř): http://blogs.msdn.com/ricom/archive/2005/05/10/416151.aspx

Odpovězeno 13/08/2008 v 15:27
zdroj uživatelem

hlasů
2

Na první otázku, je to opravdu těžké říct, jestli to by dávalo smysl, protože by pravděpodobně záviset na jaký výkon je potřeba se dostat. Já osobně jsem neviděl žádný systém široký pomalu vyprazdňuje díky GUI ve správně navržených GUI s využitím WinForms, takže nevidím důvod, proč by to mělo způsobit žádné problémy, a se vší pravděpodobností by to usnadnit život v souvislosti s GUI ,

Pokud jde o vaši druhou otázku, pokud bude přechod na jinou platformu v určitém okamžiku - Chcete-li se podívat na knihovny, které byly provedeny podle Mono ( http://www.mono-project.com/Main_Page ) toto by také měly pokrýt většinu vašich potřeb v souvislosti s křížové platformě okénkováním protože podporuje WinForms a GTK #.

Odpovězeno 13/08/2008 v 15:24
zdroj uživatelem

hlasů
1

1) má smysl dělat GUI v WinForms ale drahé věci v nativním, neřízeným C / C ++?

S největší pravděpodobností ne. Pokud jste komunikovat s mnoha dalšími nativní C DLL a tak dále, C #, je pravděpodobné, že bude v rozmezí 5% nižší o 5% rychleji než C ++ (std :: string opravdu vás zabije, pokud ji používáte)

2) případná doporučení pro dobrou křížové platformě okenního kitu, který by se vešel na scénář popsaný výše?

Pokud je to jen několik jednoduchých formulářů s tlačítky, bude mono pravděpodobně moci spustit nezměněn. Je to podpora .NET WinForms je docela dobrý v těchto dnech. Je však zadek ošklivý :-)

Odpovězeno 13/08/2008 v 21:34
zdroj uživatelem

hlasů
1

A opět, dovolte mi zdůraznit, C ++ věci jsou veerrrryyyy drahé. Bylo by to smysl dělat to, co jsem uvedl výše? (NET formy skrývání zvedání těžkých břemen C ++)

Jak již bylo uvedeno dříve, já osobně nepozoruji žádné systém široký pomalu vyprazdňuje díky WinForms v aplikacích napsaných v obou VB.NET a C #. Nicméně, v případě, že aplikace je skutečně intenzivní výkon, pak byste měli zaznamenat mírné zpomalení, pokud jste napsal vše, co v jazyce C # kvůli tomu plněna do CIL ( http://www.cl.cam.ac.uk/research/srg/han / hprls / orangepath / timestable-demo / ). Jako takový, psaní GUI v jazyce, jako je C # bude pravděpodobně dělat, že část vývoje trochu snadnější, která by vám více času na práci na kritických částí kódu. Jediný háček-22 je zde všimnout, některé pomalé pády kvůli výzvy k C / C ++ kódu z C # kód; Nicméně, toto je pravděpodobně velmi nepravděpodobné.

Odpovězeno 13/08/2008 v 20:13
zdroj uživatelem

hlasů
0

Měl jsem podobnou dilema nějaký čas zpátky, když se snaží zjistit, nejlepší způsob, jak vyvinout na základě H / W nástroj pro testování PC (což samozřejmě znamená „s možností uživatelského rozhraní“), který spolupracuje s vloženým hardwarem (přes PCMCIA rozhraní).

Překážkou bylo, že testování by měl proběhnout při maximální odchylkou 10 ms od zamýšlené čas určený testeru.

Například: V případě, že testovací vytvoří následující testovací sekvenci:

    1. Dálkově aktivovat H / W
    2. čekat na 50 ms zpoždění.
    3. Čtení / W informace H.

Zpoždění je uvedeno v kroku 2 by neměla být> 60 ms.


Vybrala jsem si aplikaci C ++ WIN32 jako můj back-end a VC ++ 2005 WinForm (.NET Platform) pro vývoj UI. Podrobné informace o tom, jak propojit tyto dva je k dispozici v MSDN
odděleny I systém takto:
V VC ++ .NET:

    1. UI mít kompletní informace o H / W (čtení přes back-end), a pro řízení H / W na vyžádání. (Tlačítka, combo-box atd .. atd ..)
    2. uživatelské rozhraní pro spuštění časově kritické testovací sekvence (jak je uvedeno ve výše uvedeném příkladu).
    3. Shromažďování těchto informací a budování proudu (File-stream) ve formátu času lineární (tj, v přesném pořadí kroků, ve kterých má být provedeno).
    4. Spuštění a ruční protřepávání mechanismus (přesměrováním standardní vstup a standardní výstup) s WIN32 back-end. Společné zdroje bude soubor proudy.

V C ++ WIN32:

    1. Interpretace vstupní soubor-Stream.
    2. Interakce s H / W.
    3. Shromáždění informací z H / W a jeho uvedení ve své výstupní soubor-Stream.
    4. Indikace zkušebního dokončení do uživatelského rozhraní (přes přesměrované standardní výstup).

Celý systém je v provozu. Zdá se, že docela stabilní. (Bez odchylky časování je uvedeno výše).
Všimněte si, že testování PC používáme výhradně za účelem H / W Testing (to mělo jen UI běží na něm, bez automatické aktualizace, antivirovou kontrolu atd .. atd ..).

Odpovězeno 09/11/2009 v 09:50
zdroj uživatelem

hlasů
0

C / C ++ věcí může skončit, že je dobrý nápad, ale teď YAGNI. Stejné je to s věcí Linux. Ignorovat, ty se nebudeš potřebovat , dokud ji budete potřebovat. Nech si to jednoduché . Unit testování sakra z ní, jak říkáte. Získat pracovní kód a vyvíjet konstrukce odtamtud.

Odpovězeno 01/10/2008 v 22:23
zdroj uživatelem

hlasů
0

gtk-ostrý je docela pěkné multiplatformní toolkit.

Gtk # je Graphical User Interface Toolkit pro mono a .Net. Projekt váže GTK + a rozmanité knihovny GNOME, což umožňuje plně nativní vývoj grafický Gnome aplikace pomocí rámců vývoj Mono a .NET.

Odpovězeno 17/09/2008 v 15:41
zdroj uživatelem

hlasů
0

Mohl bych být nepochopení problému , ale pokud se jedná o systém monitorování sítě, proč není psáno jako „vyhrazené“ službu Windows?

VB.NET by neměl být mnohem pomalejší než C #. Nejsem si 100% jistý, jestli existuje nějaké velké rozdíly v generovaném IL-kódu, ale jedinou výhodou (a ospravedlnitelný důvod ji přepsat v C #), co jsem mohl myslet (kromě toho, že C # mají hezčí syntaxe a některé další dobroty ) je použití nebezpečného kódu bloku, který by mohl věci urychlit trochu.

Odpovězeno 13/08/2008 v 20:32
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more