none
單機版AP 共用資源 RRS feed

  • 問題

  • 我最近想一個問題  若我  在寫了  一些  應用程式  其雖功能不同
    但讀取的資料  卻  同質性很高
    我想請問  各位高手  有沒有  什麼機制  可以把一些資源  擺在一個地方  不要在單機版上擺資料庫的方式
    然後  讓  不同的   .net AP 去存取該資料  
    有辦法嘛?!
    2009年8月24日 上午 03:37

解答

  • 你現在的問題出在機制
    因為你希望多人能夠同時存取,但又不想靠資料庫.
    這會存取資料時會有資料衝突的問題,所以你必須自行寫程式來處理衝突的問題,沒有甚麼比較好的機制.
    至少在我印象中用檔案多人共用時也沒有3rd的解決方案.

    至於要如何自行寫說真得難度很高,但如果如你所說只有單一管道會做寫入動作,其他皆為讀取,那可以有個簡單的辦法,寫入檔案存取時使用讀寫模式,讀取部分使用唯讀模式,這樣就不會產生檔案鎖定問題,但因為讀取時可能剛好資料寫到一半,所以會有資料不完整的問題,這部分就必須你自行手動處理了.
    • 已標示為解答 布利 2009年8月28日 上午 06:00
    2009年8月28日 上午 02:54
  • FileStream的某些建構函式是可以設定讀取/寫入的權限
    [FileStream 建構函式 ]
    ex: [FileStream 建構函式 (String, FileMode, FileAccess, FileShare, Int32, FileOptions)]

    不過我覺得蹂躪提的是一個好做法, 也就是其中一個程式負責對檔案做讀取與寫入的動作, 其它程式要求資料時皆透過這個主要的程式來存取, 而不是程式個別存取同一個檔案.

    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重。如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    • 已標示為解答 布利 2009年8月28日 上午 06:01
    2009年8月28日 上午 03:04
    版主

所有回覆

  • 看你資料有多少. 如果只有很少的一點, 可以用機碼去存.如果多一點, 可以用txt,xml之類的


    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    2009年8月24日 上午 04:17
    版主
  • XML檔案是一個不錯的媒介,尤其是.Net支援XML存取方式很多又很方便.
    2009年8月24日 上午 05:10
  • 若您有考慮到共用資源的安全性問題,不妨參考IsolatedStorage的做法,供您參考。
    2009年8月25日 上午 12:54
  • 那這樣  我會想到一個問題  若這個檔案或者 區域  碰巧有共同存取時 
    那要如何必免
    例如  A B 兩個程式正好同時都要取資料  這樣 會不會發生問題
    要怎麼處理
    2009年8月25日 上午 05:41
  • 如果是這樣,資料庫還是首選,要靠自己用程式處理這個問題的困難度滿高的.
    • 已提議為解答 Lolota Lee 2009年8月28日 上午 02:35
    2009年8月25日 上午 05:49
  • 共用檔案會有檔案被鎖定的問題,如果真的想要用檔案系統做的話,有個簡單的做法,就是在開啟檔案前先將檔案COPY一份,然後各個程式使用自己COPY出來的檔案,
    應該可以解決鎖定的問題。

    PS:這個方法僅限於讀取檔案,若遇到寫回檔案則會比較難處理,就最好依照programlin的建議使用DB。
    2009年8月25日 上午 08:52
  • 我舉個例子  因為  這個檔案可能要不斷 收外部的push 資料
    但我希望能讓  各個應用程式能統一拿一份資料源即可
    希望在本機電腦上 

    2009年8月25日 上午 08:55
  • 抱歉這個問題  大家  有沒有除了  在Client端  擺資料庫的其它想法
    2009年8月28日 上午 02:30
  • Hi,

    不一定要在Client端各擺一個資料庫, 您可以建立一個共用資料庫放在某一台伺服器上,然後大家共用那個資料庫.


    以上供您參考.

    年度軟體技術盛會微軟Tech.Days 9月22日全新登場, 您還在等什麼? 快報名就對了.


    2009年8月28日 上午 02:36
  • 不好意思  主管的想法 就是要本機上的 資源分享不要用到  server 端的資料庫
    讓各個AP 可以去存取統一的資料
    但若用檔案 我會想到  共同存取的問題

    2009年8月28日 上午 02:40
  • 先確認一下,那未來您的單機版程式所讀取的資料,會以什麼形式存在?

    年度軟體技術盛會微軟Tech.Days 9月22日全新登場, 您還在等什麼? 快報名就對了.


    2009年8月28日 上午 02:45
  • 這篇文章 就是在請教大家  用什麼格式
    然後 什麼機制  可以  比較好呢

    2009年8月28日 上午 02:47
  • 你現在的問題出在機制
    因為你希望多人能夠同時存取,但又不想靠資料庫.
    這會存取資料時會有資料衝突的問題,所以你必須自行寫程式來處理衝突的問題,沒有甚麼比較好的機制.
    至少在我印象中用檔案多人共用時也沒有3rd的解決方案.

    至於要如何自行寫說真得難度很高,但如果如你所說只有單一管道會做寫入動作,其他皆為讀取,那可以有個簡單的辦法,寫入檔案存取時使用讀寫模式,讀取部分使用唯讀模式,這樣就不會產生檔案鎖定問題,但因為讀取時可能剛好資料寫到一半,所以會有資料不完整的問題,這部分就必須你自行手動處理了.
    • 已標示為解答 布利 2009年8月28日 上午 06:00
    2009年8月28日 上午 02:54
  • Hi,

    我是覺得資料庫就是最好的選擇
    我是不了解不採行資料庫的原因是為何
    若不採用就是要自行處理你所說的同時存取問題

    不然我覺得就是把程式切開看
    資料儲存就用檔案儲存
    但是讀取改用兩個應用程式互通的方法來做
    像是進程溝通、透過剪貼簿互通、透過Socket互通、WCF、Web Service、.NET Remoting、MSMQ等


    http://www.dotblogs.com.tw/larrynung/
    2009年8月28日 上午 02:54
  • FileStream的某些建構函式是可以設定讀取/寫入的權限
    [FileStream 建構函式 ]
    ex: [FileStream 建構函式 (String, FileMode, FileAccess, FileShare, Int32, FileOptions)]

    不過我覺得蹂躪提的是一個好做法, 也就是其中一個程式負責對檔案做讀取與寫入的動作, 其它程式要求資料時皆透過這個主要的程式來存取, 而不是程式個別存取同一個檔案.

    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重。如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    • 已標示為解答 布利 2009年8月28日 上午 06:01
    2009年8月28日 上午 03:04
    版主
  • 1. 我一直以為您是在說開發時的資料傳遞,誤會了, 抱歉.

    2. 您說您有多個單機系統但是會讀取相同來源資料, 對吧?
        如果未來您的客戶跟您公司購買多種單機系統, 他們資料也要統一存取, 所以我還是建議您使用server層級的資料庫.
        存取安全跟concurrency上比較有保障.

    年度軟體技術盛會微軟Tech.Days 9月22日全新登場, 您還在等什麼? 快報名就對了.


    2009年8月28日 上午 03:05
  • FileStream的某些建構函式是可以設定讀取/寫入的權限
    [FileStream 建構函式 ]
    ex: [FileStream 建構函式 (String, FileMode, FileAccess, FileShare, Int32, FileOptions)]

    不過我覺得蹂躪提的是一個好做法, 也就是其中一個程式負責對檔案做讀取與寫入的動作, 其它程式要求資料時皆透過這個主要的程式來存取, 而不是程式個別存取同一個檔案.

    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重。如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事


    我想請問一下  這個就是我要的方法
    但若遇到  的狀況如下
    1.正好檔案在被寫入  而有程式需要讀取 在這同時  Filestream 是如何處理
    2. 若此檔案 正好有兩個ap 要同時存取  那要如何去必免發生 同時存取時 所發生的問題 還是 FileStream 會幫我解決
    • 已編輯 布利 2009年8月28日 上午 03:56
    2009年8月28日 上午 03:54
  • 這個必須要處理行程間同步化(Process Synchronization)的問題。

    請去翻作業系統的教科書(不是教你操作 Windows 的那種,是像 Operating System Concepts 這種的),裡面有說明如何處理不同的行程處理單一資源的情況。
    先去把概念補起來,再去看 .NET Framework 中怎麼去支援這些行為會比較好。

    不外乎就是:

    1. Mutex
    2. Semaphore
    3. Monitor

    FileStream 只是提供檔案讀寫,要它做到 lock/unlock ... 做夢比較快吧。
    小人物一枚。
    2009年8月28日 上午 04:22
    版主
  • 當你的程式讀寫次數在短時間內非常頻繁, 就會出現朱大說的情形.
    其實我覺得大家都給你一個方向了.
    但你如果堅持要用多程序讀寫單一檔案, 其實你可以自己寫個小程式測測看.
    寫一個會一直寫資料進檔案的程式,和兩三個讀檔的程式同時執行.
    就可以預期是否能夠達成你的要求.
    我們回答問題只能告訴你一些重點, 一則我們很少會這樣使用文字檔 二則我們大概也沒這麼多的時間寫個測試程式.
    也許你可以花點時間測測看, 然後告訴我們答案, 你覺得如何?

    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重。如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    2009年8月28日 上午 04:43
    版主
  • 瞭解  謝謝各位高手
    2009年8月28日 上午 06:09
  • 用資料庫,不是有Sql Express...Local 端的資料庫可用.
    2009年8月28日 上午 06:24