最近在寫一個小程式,winform里面有listview控制元件,首次運行時往里面添加網路主機資訊,比較網路通信型別(tcp,udp)IP地址,埠號等等,我想把這些資訊保存起來,以便下次啟動可以馬上通信。現在的問題是不知道以什么方式保存比較好,網上查的資料有用ini,xml,config方式,這幾種方式有沒有說誰比較高效,又有什么區別。資料量不大,幾十條資料吧。還有個問題也并問了,當程式下次啟動時讀取配件檔案,該如何區分哪條資訊對應哪個遠程主機,比如初始配置時有A,B,C三條主機資訊,下次啟動時,怎么區分A對應A主機呢。請大神提供一下解決思路,在此萬分感謝!
uj5u.com熱心網友回復:
多少才算低效,你先要給出一個數量化的指標。uj5u.com熱心網友回復:
軟體編程不輕言“是非”,而是以測驗為準,以當時的實踐事實為準。你要把配置資料保存到一個 UI 界面,前提是你先搞明白了鎖配置資料表格每一行每一列代表了什么,否則也就沒有必要動手去寫代碼。所有所有的問題以及解決都有個次序,能判斷所花的精力是否必要,有沒有更重要的技術需要去學習,才不會自相矛盾。uj5u.com熱心網友回復:
你說的三種都可以,無非就是讀檔案,然后控制元件系結資料,也就幾秒的事情,這效率可以了uj5u.com熱心網友回復:
ini,xml格式就下面這樣,很好區分ABCINI
[A]
A1=a1
A2=a2
[B]
B1=b1
B2=b2
[C]
...
XML
<Param>
<A>
<A1>a1</A1>
<A2>a2</A2>
</A>
<B>
<B1>b1</B1>
<B2>b2</B2>
</B>
</Param>
uj5u.com熱心網友回復:
根據電腦硬體特性,一般讀寫記憶體比硬碟快許多,但是配置資訊放記憶體不現實,放在硬碟都一樣,放在網路上又會慢些。 監控設備出售uj5u.com熱心網友回復:
把配置資訊存放到靜態類中,保存時使用類的序列化方式存盤到xml,讀取時反序列化到類中uj5u.com熱心網友回復:
幾十條資料用什么還重要嗎? 反正你說的那幾個 都是文本方式讀寫....沒什么區別uj5u.com熱心網友回復:
XML 應該最高效(綜合考慮)。如果不考慮擴展性、跨平臺等要求,我覺得 DataTable 是不錯的選擇,可以直接序列化成 XML 保存,很容易反序列化回來,用于保存二維表格資料比較容易實作,且通俗易懂。ini 不建議使用(微軟官話)。uj5u.com熱心網友回復:
這個無需糾結,如果你玩net core。在你的program.cs里就2句話
var host_bd = new HostBuilder();
host_bd.ConfigureAppConfiguration((context, ConfigurationBinder) =>
{
ConfigurationBinder.AddJsonFile("appsettings.json");
})
此處是要求你回傳一個IConfigurationBuilder就好,也就是對于我們程式員來說,考慮問題的方式并不如同啥博客園那些伙計們那樣喜歡糾結啥“XXX vs yyy”,“yyy 比xxx好”,對我們程式員來說,我們根本就不考慮這個。
他就是一個IConfigurationBuilder,至于你是提供ini的實作,提供json實作,提供yaml,提供ado.net的實作,提供redis的實作,提供xml的實作。我們其實根本就不在乎。
比如這里我用了json實作,那么又如何呢?你告訴我你想用yaml,沒問題。我只需要nuget一個yaml的實作,然后在這里修改一句話就好。
so,你們還要糾結 xxx vs yyy么?
uj5u.com熱心網友回復:
程式員做事情不是非此即彼。程式員做事情,既不向左,也不向右。我們站中間,依賴抽象
微軟目前給你的抽象是IConfigurationBuilder介面。至于實作這個介面的Provided是誰,程式員并不關心。你要往左我們就往左,你說左邊不好,俺們就去右邊。
uj5u.com熱心網友回復:
隨意.TXT,INI,XML,甚至SQLITE都可以.
uj5u.com熱心網友回復:
最后還是選擇用了json方式,代碼量少。但是怎么區分還沒想到辦法。因為在listview是動態創建主機資訊,目前列1用的是guid方式獲取的ID,用于區分每個物件。我卡在了怎么根據ID來判斷,使用定值判斷能做但是就寫死了,不便于維護
uj5u.com熱心網友回復:
判斷什么?不判斷。
參考:ip地址和域名。
我說打開“百度”-------你做的事情是打開瀏覽器輸入“www.baidu.com”對么,而不是輸入了一個地址對么
所以,你給他一個名字就好。這里其實不存在判定。
請連接“火星探測者”一號這是人類做法,請連接設備“xxxxx-xxxxxxx-xxxxx-xxxx”這是機器的做法。差別只是我們人類不喜歡記那種沒意義的符號
uj5u.com熱心網友回復:
火星探測者一號 等于 xxxxx-xxxxxxx-xxxxx-xxxx就按你的說法,我guid標識唯一,那也不妨礙我們另外給他起一個更容易記憶的人類名字
uj5u.com熱心網友回復:
1 ini,xml,config 隨便哪種,你用就是了。十幾條資料的別說效率性能之類的話題。
你要先解決的問題是,用戶對于檔案的讀寫權限。
2 A,B,C主機,存盤后不知道對應?
你存盤一個 key-value。
app.config/web.config了解嗎?存盤一個key-value就可以了。
uj5u.com熱心網友回復:
對于一般簡單的配置,不需要多臺服務器共用的配置,你無須放在象redis之類的快取中,你可以自已放在ini,xml,config中,讀入到cache中,作快取依賴,這樣速度最快。因為是讀的本機服務器的快取,最多也是本機服務器上的檔案。uj5u.com熱心網友回復:
最初流行ini時用ini,后來流行用xml時用xml。現在我喜歡用json config,因為序列化物件方便呀。提取時序列化引數為物件來處理,保存時,將物件序列化一次性保存。比xml搜索定位修改,或者xml序列化都方便!不過呢,系統級別的配置,我還是用app.config,編碼規范很重要。
uj5u.com熱心網友回復:
試試我的開源庫https://github.com/dotnet-campus/dotnetCampus.Configurations
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/28029.html
標籤:C#
