ConfigurationManager.AppSettings Výkon Obavy

hlasů
21

Mám v plánu být uložení všechny mé nastavení konfiguračních v app.config sekci Moje aplikace (pomocí ConfigurationManager.AppSettingstřídy). Jako uživatel změní nastavení pomocí UI (kliknutím políčka, výběr přepínačů apod) o aplikaci, mám v plánu psát tyto změny ven na AppSettings. Ve stejné době, když je program spuštěn jsem v plánu se pracuje se AppSettingsneustále z procesu, který bude neustále zpracování dat. Změny nastavení prostřednictvím uživatelského rozhraní je třeba mít vliv na zpracování dat v reálném čase, což je důvod, proč tento proces bude pracuje se AppSettingsnepřetržitě.

Je to dobrý nápad, pokud jde o výkon? Pomocí AppSettingsmá být „správná cesta“ pro uložení a nastavení konfigurace přístupu při psaní .Net aplikací, ale obávám se, že tato metoda nebyla určena pro konstantní zátěž (alespoň pokud jde o nastavení neustále číst).

Pokud má někdo zkušenosti s tím bych velice vážíme vstup.

Aktualizace: měl bych objasnit několik bodů.

Nejedná se o webové aplikace, takže připojení databáze na žádost by mohla být zbytečná jen pro ukládání nastavení konfigurace. To je Forms aplikace Windows.

Podle documention MSDN je ConfigurationManagerje pro ukládání nejen nastavení úrovně aplikace, ale uživatelské nastavení stejně. (Důležité zejména v případě, například, aplikace je nainstalován jako aplikace částečnou důvěryhodnosti.)

Aktualizace 2: Přijal jsem odpověď lomaxx, protože Propertiesskutečně vypadají jako dobré řešení, aniž by bylo nutné přidat další vrstvy ke své žádosti (například databáze). Při použití vlastnosti, to už dělá všechnu mezipaměti, že jiní navrhli. To znamená, že veškeré změny a následné čtení jsou všechno udělal v paměti, což je extrémně rychlý. Vlastnosti píše pouze změny na disk, když ji explicitně říct. To znamená, že můžete provádět změny v nastavení konfiguračních on-the-fly za běhu a pak teprve provést finální záchranu ven na disk, když se program ukončí.

Jen za účelem ověření, že by ve skutečnosti být schopen zvládnout zátěž, kterou potřebuji, udělal jsem nějaké testování na mém notebooku a byl schopen udělat 750.000 čte a zapisuje 7500 za sekundu s využitím vlastností. To je tak daleko nad rámec, co naše aplikace bude někdy dokonce přiblížit k nutnosti, že se cítím docela v bezpečí pomocí vlastnosti bez dopadu na výkon.

Položena 07/08/2008 v 01:12
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
8

protože používáte WinForms aplikaci, pokud je to v NET 2.0 je to vlastně systém uživatelských nastavení (tzv Properties), který je navržen pro tento účel. Tento článek na webu MSDN má docela dobrý úvod do této

Pokud jste stále obavy o výkonu pak se podívat na SQL Compact Edition , který je podobný SQLite, ale je dar společnosti Microsoft, který jsem našel hraje velmi pěkně s WinForms a je tu i možnost , aby to fungovalo s LINQ

Odpovězeno 07/08/2008 v 01:45
zdroj uživatelem

hlasů
2

AppSettings ve skutečnosti není určen pro to, co se snažíte dělat.

Po spuštění aplikace .NET, přečte v souboru app.config a ukládá její obsah v paměti. Z tohoto důvodu, po zápisu do souboru app.config, budete muset nějak přinutit runtime znovu analyzovat soubor App.config, takže to může opět mezipaměti nastavení. To je zbytečné

Nejlepším řešením by bylo použít databázi pro ukládání nastavení konfigurace.

Nedojde-li k použití databáze, můžete snadno nastavit externí konfiguraci XML souboru. Při spuštění aplikace, můžete do mezipaměti její obsah v objektu NameValueCollection nebo Hashtable objekt. Jak si změnit / přidat nastavení, měli byste to udělat do té archivované kopie. Když aplikace se vypne, nebo ve vhodném časovém intervalu, můžete psát obsah vyrovnávací paměti zpět do souboru.

Odpovězeno 07/08/2008 v 02:10
zdroj uživatelem

hlasů
2

Dylan,

Nepoužívejte konfigurační soubor aplikace pro tento účel použít SQL DB (SQLite, MySQL, MSSQL, cokoliv), protože budete muset starat méně o otázkách souběžnosti při čte a zapisuje do konfiguračního souboru.

Budete mít také větší flexibilitu v typu dat, která chcete uložit. Úsek appSettings je jen výčet klíč / hodnota, která může přerůst jak plyne čas a jak app zraje. Dalo by se použít vlastní konfigurační sekce, ale pak jste do nové problémové oblasti, pokud jde o design.

Odpovězeno 07/08/2008 v 01:56
zdroj uživatelem

hlasů
2

Podívejte se na SQLite, to vypadá jako dobrá volba pro tento konkrétní scénář.

Odpovězeno 07/08/2008 v 01:41
zdroj uživatelem

hlasů
1

Já bych použít konfiguračních souborů pro ukládání uživatelských dat. Použijte db.

Odpovězeno 07/08/2008 v 01:43
zdroj uživatelem

hlasů
1

Někdo opravte mě, jestli se mýlím, ale já si nemyslím, že AppSettings se obvykle míní, které mají být použity pro tyto typy nastavení konfigurace. Za normálních okolností byste dát pouze v nastavení, které zůstávají poměrně statický (připojení k databázi nitky, cesty k souborům, atd.). Chcete-li uložit přizpůsobitelné uživatelské nastavení, by bylo lepší vytvořit samostatný preference soubor, nebo v ideálním případě uložit tato nastavení v databázi.

Odpovězeno 07/08/2008 v 01:26
zdroj uživatelem

hlasů
0

jedna věc, kterou bych se podívat na dělá, je mezipaměti AppSettings na čtení, pak splachování nastavení z mezipaměti na zápis, který by měl minimalizovat množství aktuálního zatížení serveru musí vypořádat s pro zpracování appSettings.

Také, pokud je to možné, podívejte se na lámání appSettings až do configSections takže si můžete přečíst nastavení související zápisu a paměť.

Z výše uvedených důvodů, bych vážně uvažovat při pohledu na ukládání těchto hodnot v databázi, jak se zdají být ve skutečnosti ukládání uživatelských preferencí , nikoli pro nastavení aplikace.

Odpovězeno 07/08/2008 v 01:28
zdroj uživatelem

hlasů
0

Mohl bych se zeptat, proč nejste ukládání nastavení uživatele v databázi?

Obecně platí, že uložím nastavení aplikací, které jsou změněny velmi zřídka v sekci appSettings (chybové protokoly výchozí e-mailové adresy jsou zaslány, počet minut, po které se automaticky odhlášen, atd.) Rozsah této skutečnosti je na žádost , ne na uživatele, a obecně se používá pro nastavení nasazení.

Odpovězeno 07/08/2008 v 01:27
zdroj uživatelem

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