我有一個應用程序需要極少的持久性存儲。實際上,我們正在談論整數。所有應用程序的需求是在下一次啓動時知道這些整數(並且整數在運行時會改變)。C#.NET - 存儲一些非常小規模持久信息的方法?
一個數據庫對此是矯枉過正,但我並不特別想僅僅使用一個文本文件。
C#是否有任何機制來保持這樣的小值之間的運行?我注意到你可以在資源文件和其他地方存儲東西 - 我不知道你是否可以在運行時改變它們。我剛剛學習C#& NET新工作,所以如果這是一個愚蠢的問題,道歉!
我有一個應用程序需要極少的持久性存儲。實際上,我們正在談論整數。所有應用程序的需求是在下一次啓動時知道這些整數(並且整數在運行時會改變)。C#.NET - 存儲一些非常小規模持久信息的方法?
一個數據庫對此是矯枉過正,但我並不特別想僅僅使用一個文本文件。
C#是否有任何機制來保持這樣的小值之間的運行?我注意到你可以在資源文件和其他地方存儲東西 - 我不知道你是否可以在運行時改變它們。我剛剛學習C#& NET新工作,所以如果這是一個愚蠢的問題,道歉!
這裏是一個blurp of another SO後,介紹如何安裝應用程序設置,這是閱讀一個簡單的基於文件的解決方案/寫作價值。
「如果你使用Visual Studio工作,那麼這是很容易得到持久化的設置。右鍵單擊Solution Explorer中的項目,選擇屬性,選擇設置選項卡,單擊超鏈接,如果不存在設置。使用設置選項卡創建應用程序設置Visual Studio創建Settings.settings和Settings.Designer.settings文件,其中包含從ApplicationSettingsBase繼承的單例類設置您可以通過代碼訪問此類以讀取/寫入應用程序設置:「
Settings.Default["SomeProperty"] = "Some Value";
Settings.Default.Save(); // Saves settings in application configuration file
之一進行序列化**應用範圍**設置在運行時是隻讀的,**用戶範圍**設置是可讀寫的,但它們將被刪除他運行的每個過程 - 請參閱我的答案:http://stackoverflow.com/questions/10304665/saving-setting-to-a-exe/10305024#10305024 – balexandre 2012-04-25 21:16:12
不錯,謝謝你的好評:) – 2012-04-25 23:12:17
我會使用embeeded sqlite數據庫。
http://www.codeproject.com/Articles/22165/Using-SQLite-in-your-C-Application
SQLite是一個小型的,快速和可嵌入的數據庫,其中數據庫引擎和接口被合併成一個單一的庫。它還能夠將所有數據存儲在單個文件中。因此,如果您的應用程序需要獨立的數據庫,SQLite可能是您的最佳選擇。當然,選擇SQLite還有其他一些原因,包括:
SQLite的內存佔用量小,訪問數據庫只需要一個庫,因此非常適合嵌入式數據庫應用程序。 SQLite已被移植到許多平臺,甚至可以在Windows CE和Palm OS上運行。 SQLite符合ACID標準,符合所有四項標準 - 原子性,一致性,隔離性和持久性。 SQLite實現了ANSI-92 SQL標準的一大部分,包括視圖,子查詢和觸發器。 沒有額外的數據庫驅動程序的問題,需要ODBC配置。只需在應用程序中包含庫和數據文件即可。 SQLite擁有C/C++,PHP,Perl,Python,Tcl等原生語言API .C#的Native API仍然不存在。
+1爲好答案 - 我欣賞細節。實際上,我對SQLite非常熟悉並喜歡它 - 但它需要我獲得一個大的API幷包含大量的代碼,以便在比SQLite接口小得多的應用程序中存儲幾個整數,所以它可能也是矯枉過正的: (謝謝你的幫助:) – 2012-04-25 21:08:26
只需30個整數,爲什麼不使用使用app.config?我現在看來更合乎邏輯了? – 2012-04-25 21:12:43
您可以將列表序列化爲一個xml文件。這是你如何保存:
var xs = new System.Xml.Serialization.XmlSerializer(typeof(List<int>));
List<int> ints = new List<int> { 1, 2, 3 };
using (FileStream fs = new FileStream(@"C:\store.xml", FileMode.OpenOrCreate))
{
xs.Serialize(fs, ints);
}
和檢索它同樣簡單:
using (FileStream fs = new FileStream(@"C:\store.xml", FileMode.OpenOrCreate))
{
ints = xs.Deserialize(fs) as List<int>;
}
爲了將來的改進,最好將列表
我會選擇文件存儲a nd避免將數據庫或註冊表作爲第一個需要大量框架和第二個...
您可以創建文件來保存所有的ID在同一個:喔很好,從來沒有登記使用XML作爲文件存儲,這是一個偉大的閱讀玩:)
節點,或寫每個節點一個ID,它是你的,這樣的事情就可以了:
<?xml version="1.0" encoding="utf-8" ?>
<settings>
<selected>
<id>1</id>
<id>8</id>
<id>12</id>
<id>15</id>
</selected>
</settings>
爲了創建這樣的文件:
XmlDocument doc = new XmlDocument();
XmlElement set = (XmlElement)doc.AppendChild(doc.CreateElement("settings"));
XmlElement sel = (XmlElement)set.AppendChild(doc.CreateElement("selected"));
int[] selectedIds = new int[] { 1, 2, 3, 4, 5 };
foreach (int id in selectedIds)
sel.AppendChild(doc.CreateElement("id")).InnerText = id.ToString();
string path = Path.GetDirectoryName(Application.ExecutablePath);
doc.Save(path + "/settings.xml");
爲了閱讀,您可以使用XmlReader
,XmlTextReader
,XDocument
,等...
如果您正在使用C#4.0及以上,你可能想看看新Memory Mapped Files。
使用持久性內存映射文件將爲您提供文件的輕鬆性,但是可以將映射到內存的速度提供給您。你當然仍然必須自己管理文件格式。
- 持久化的存儲器映射文件
持久化的文件是與一個磁盤上的源文件相關聯的存儲器映射的文件。當最後一個進程完成對文件的處理時,數據將被保存到磁盤上的源文件中。這些內存映射文件適用於處理非常大的源文件。
這可能對30個整數來說可能是矯枉過正,但這是另一種選擇,特別是如果速度很關鍵。
webforms,winforms,wpf,wp? – balexandre 2012-04-25 21:05:31
一旦我弄清楚自己在做什麼,staright-up控制檯應用程序最終可能會變成一個windows服務。 – 2012-04-25 21:06:33
然後,我會使用XML文件作爲.NET的文件存儲是偉大的或寫作和閱讀它,再加上你甚至可以使用Linq2Xml ... – balexandre 2012-04-25 21:08:42