主頁 > .NET開發 > C# 用什么方式保存程式配置比較高效

C# 用什么方式保存程式配置比較高效

2020-09-13 22:36:36 .NET開發

最近在寫一個小程式,winform里面有listview控制元件,首次運行時往里面添加網路主機資訊,比較網路通信型別(tcp,udp)IP地址,埠號等等,我想把這些資訊保存起來,以便下次啟動可以馬上通信。現在的問題是不知道以什么方式保存比較好,網上查的資料有用ini,xml,config方式,這幾種方式有沒有說誰比較高效,又有什么區別。資料量不大,幾十條資料吧。還有個問題也并問了,當程式下次啟動時讀取配件檔案,該如何區分哪條資訊對應哪個遠程主機,比如初始配置時有A,B,C三條主機資訊,下次啟動時,怎么區分A對應A主機呢。請大神提供一下解決思路,在此萬分感謝!

uj5u.com熱心網友回復:

多少才算低效,你先要給出一個數量化的指標。

uj5u.com熱心網友回復:

軟體編程不輕言“是非”,而是以測驗為準,以當時的實踐事實為準。你要把配置資料保存到一個 UI 界面,前提是你先搞明白了鎖配置資料表格每一行每一列代表了什么,否則也就沒有必要動手去寫代碼。所有所有的問題以及解決都有個次序,能判斷所花的精力是否必要,有沒有更重要的技術需要去學習,才不會自相矛盾。

uj5u.com熱心網友回復:

你說的三種都可以,無非就是讀檔案,然后控制元件系結資料,也就幾秒的事情,這效率可以了

uj5u.com熱心網友回復:

ini,xml格式就下面這樣,很好區分ABC

INI

[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熱心網友回復:

參考 4 樓 Bridge_go的回復:
ini,xml格式就下面這樣,很好區分ABC

INI

[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>

最后還是選擇用了json方式,代碼量少。但是怎么區分還沒想到辦法。因為在listview是動態創建主機資訊,目前列1用的是guid方式獲取的ID,用于區分每個物件。我卡在了怎么根據ID來判斷,使用定值判斷能做但是就寫死了,不便于維護

uj5u.com熱心網友回復:

參考 12 樓 人遇到獅子 的回復:
最后還是選擇用了json方式,代碼量少。但是怎么區分還沒想到辦法。因為在listview是動態創建主機資訊,目前列1用的是guid方式獲取的ID,用于區分每個物件。我卡在了怎么根據ID來判斷,使用定值判斷能做但是就寫死了,不便于維護


判斷什么?不判斷。

參考: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#

上一篇:宣告一個參考型別的空變數時,大家習慣用 =null 還是 =default 呢?為什么

下一篇:Unity2017使用的Google.Protobuf.dll(.NET4.6)報錯,求解決方法!!!

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more