1

我的ASP.NET應用程序讀取一個xml文件以確定它當前處於哪個環境(例如本地,開發,生產)。從物理文件讀取連接字符串vs應用程序對象(ASP.NET)的優點/缺點?

它每次打開一個到數據庫的連接都會檢查這個文件,以便知道從應用程序設置中獲取哪個連接字符串。

我正在進入發展階段,效率正在成爲一個問題。我不認爲在我希望訪問數據庫的情況下(非常頻繁)必須在物理磁盤上讀取文件是一個好主意。

我正在考慮在Application [「ConnectionString」]中存儲連接字符串。因此,代碼將

public static string GetConnectionString 
     { 
      if (Application["ConnectionString"] == null) 
      { 
       XmlDocument doc = new XmlDocument(); 
       doc.Load(HttpContext.Current.Request.PhysicalApplicationPath + "bin/ServerEnvironment.xml"); 
       XmlElement xe = (XmlElement) xnl[0]; 

       switch (xe.InnerText.ToString().ToLower()) 
       { 
        case "local": 
         connString = Settings.Default.ConnectionStringLocal; 
         break; 

        case "development": 
         connString = Settings.Default.ConnectionStringDevelopment; 
         break; 

        case "production": 
         connString = Settings.Default.ConnectionStringProduction; 
         break; 

        default: 
         throw new Exception("no connection string defined"); 
       } 
       Application["ConnectionString"] = connString; 
      } 
      return Application["ConnectionString"].ToString(); 
     } 

我沒有設計的應用程序,這樣我想一定有一個原因,每一次讀取XML文件(更改設置的應用程序運行時?)我很少概念這裏的內部運作。優缺點都有什麼?你認爲通過實現上述功能我會看到一個小的性能增益嗎?

感謝

+0

如果有理由保留XML文件,您可以隨時將解析後的文檔添加到緩存中,以消除可能來自其的任何性能問題。而且,這不會增加太多的代碼。另外,如果您還在文件(包含的功能)上創建緩存依賴項,則緩存項目將在文件更改後自動過期。 – 2010-04-09 17:06:55

回答

7

哇。把它扔到垃圾桶裏。

所有.config文件(web或app.config)都有一個專用於連接字符串的部分,可以使用ConfigurationManager.ConnectionStrings屬性讀取這些文件。

對於本地和測試環境,我只是成立了三個連接字符串如下

<connectionStrings> 
    <add name="default.local" connectionString="etc ..> 
    <add name="default.test" connectionString="etc ..> 
    <add name="default" connectionString="etc ..> 
</connectionStrings> 

確定獲取基於配置文件的另一個設置其連接stirng。小型實用功能利用這些信息來選擇正確的連接字符串。

通過這種方式,配置文件在環境設置以外的不同部署中保持不變。

編輯:忘了提及這些值被緩存在內存中,並且應用程序在它們被更改時重新啓動(可能是個問題,可能有用)通過ConfigurationManager類直接到.config文件的性能是絕對好的。

+0

你應該能夠確定你的應用程序應該使用什麼樣的環境從網址 - 說你有一個開發網站。 http://dev.mydomain.com,測試網站http://test.mydomain.com和生產http://www.mydomain.com - 您可以檢索主機名,獲取網址的第一部分,以及選擇適當的連接字符串。一塊蛋糕。 – 2010-04-09 12:57:52

+0

您也可以只使用一個connectionString名稱並使用部署工具更改該值。 – 2010-04-09 17:05:03

+0

@Jeff - 同意 - 這個例子來自只有記事本可用的操作環境。 – 2010-04-09 18:15:30

3

我完全同意詹姆斯韋斯特蓋特。如果你使用web.config,你不必關心這個問題。

如果您因任何原因無法使用web.config,我會說您的方法是正確的。將值存儲在應用程序存儲器上,避免從磁盤反覆讀取連接字符串。

如果您需要更改連接字符串,則必須重新啓動應用程序。連接字符串不應該每天更改,所以這不應該是一個問題。

順便說一句:我不太喜歡邏輯問你在哪個環境。這根本不需要......

+0

這是很好的信息......感謝我以一種提高整體理解的方式解決了我的想法 – HaterTot 2010-04-09 20:43:18

相關問題