2009-04-22 2 views
2

Ich möchte den schnellsten Weg wissen, um auf meine Globals zuzugreifen ... sie werden sich nur in der Beta-Testphase ändern. bevor wir leben gehen. Von da an werden sie sich niemals ändern.Verwendet ein const in einer Klasse in App_Code schneller/schneller als mit appSettings in config.web in einer Webforms asp.net App?

im Denken, dass es ein Overhead ist seine sauberere Code Sachen aus web.config in immer auch weise App.HostUrl statt ConfigurationManager.AppSettings [ "HostUrl"] zu schreiben. ToString()

app.cs

public class App { 
    public const string HostUrl = "http://www.{domain}.co.uk"; 
    public const string iHostUrl = "http://img.{domain}.co.uk"; 
} 

oder

web.config

<appSettings> 
<add key="HostUrl" value="http://www.{domain}.co.uk" /> 
<add key="iHostUrl" value="http://img.{domain}.co.uk" /> 
<appSettings> 

Antwort

5

Ein const wird schneller sein, aber das begrenzt unsere Bereitstellungsoptionen. Als Alternative, warum erstellen Sie nicht eine statische Variablen und setzen Sie die Appsetting dort in Ihrem Application_Start (in global.asax).

public class App { 
    public static string HostUrl; 
    public static string iHostUrl; 
} 

In Global.asax.cs:

void Application_Start(object sender, EventArgs e) 
{ 
    App.HostUrl = ConfigurationManager.AppSettings["HostUrl"].ToString(); 
    App.iHostUrl = ConfigurationManager.AppSettings["iHostUrl"].ToString(); 
} 
+0

Danke für die schnelle Antwort-. Inwiefern begrenzt es die Bereitstellungsoptionen? Fehle ich etwas? bezahlen wir Unboxing, wenn wir Application State verwenden? oder ist das vernachlässigbar? –

+0

Zum Beispiel, wenn Sie sich vor der Zusammenstellung Ihre Anwendung es ist viel einfacher, die web.config zu aktualisieren als die gesamte App erneut bereitstellen. – Keltex

5

Web.config wird ohnehin von Ihrer Anwendung analysiert, daher ist in der Praxis kein zusätzlicher Aufwand verbunden. Ob es App-Einstellungen hat oder nicht, die Datei wird immer noch geöffnet, gelesen und analysiert.

Sie sollten sich Sorgen über echte Leistungsengpässe in Ihrer Anwendung, anstatt etwas, das es einmal wenn es startet. Sie erzielen keine spürbare Leistungssteigerung, wenn Sie Ihre Einstellungen nicht in web.config speichern.

5

Ich benutze Klassen mit Konstanten für Dinge, die wirklich konstant ist (das heißt Primärschlüssel von Werten in Lookup-Tabellen, die nie geändert werden). Das Zeug, das Sie in Ihrem Beispiel haben, sieht so aus, als würde es sich tatsächlich zwischen einer Testumgebung und einer Produktionsumgebung ändern, was genau die Art von Zeug ist, das ich für sinnvoll halte, es in eine .config-Datei zu packen. Diese Dateien können dann in Ihrem Quellcodeverwaltungs-/Konfigurationsverwaltungssystem für jede der Umgebungen gespeichert werden, für die Sie die Bereitstellung durchführen.

Was die Hässlichkeit von 'ConfigurationManager.AppSettings ["HostUri"] betrifft, können Sie diese immer mit Getter in einer Klasse in Ihrem app_code oder in einer externen Bibliothek in statische Eigenschaften umwandeln, so dass Sie einfach' App 'sagen können .HostUrl '.

Ich bin ziemlich sicher, dass die Werte in der Konfiguration im Speicher zwischengespeichert werden, wenn die App initialisiert wird und/oder wenn die Werte das erste Mal aus dem Konfigurationssystem aufgerufen werden, so dass der Leistungsunterschied wahrscheinlich ist ziemlich vernachlässigbar.

Verwandte Themen