2011-12-12 109 views
2

我正在開發一個wpf應用程序,其中包含按類別排序的按鈕的儀表板。每個按鈕打開一個資源,這可以是PDF,視頻等。總共有12個類別,每個類別有60個主題和教材。總共720個。如何處理.net應用程序中的大量應用程序資源?

現在我的設置如下: 對於每個主題,我將相關學習資料的文件名存儲在數據庫中(SubjectID:124;標題:「SomethingSmart」;資源:「SmartPDF.pdf」) 。我的資源存儲在每個類別/文件夾的硬盤中。因此,當我加載一個主題時,我在數據庫中查找文件名,並在該類別的相關文件夾之前加載並加載文件。

現在有些東西告訴我這不是理想的設置。首先,因爲所有的文件都存儲在硬盤上,這樣的硬編碼路徑:

  • C:\ TeachingMaterials /組別/ pdf1.pdf
  • C:\ TeachingMaterials /組別/ pdf2.pdf
  • C:\ TeachingMaterials /組別2/pdf1.pdf
  • C:\ TeachingMaterials /組別2/video2.pdf

其次,部署應用程序像這僅僅是荒謬的,「是的,第一個拷貝200 MB的資源給你的C:驅動器 - 哦,你沒有你說的行政權利?然後,這太糟糕了。」

是否有這樣做的更優雅的方式?儘管通過應用程序添加和刪除教材的可能性仍然可能。

+0

您可以存儲資源的完整路徑或將其複製/移動到您的應用程序控制的目錄中。「程序數據」是通常用於此目錄的目錄。請參閱特殊文件夾。 – kenny

回答

0

你可以使用Isolated Storage來存儲文件。這是爲您的應用.NET框架的支持文件存儲區,以便用戶可以安裝文件

或者你可以使用相對路徑,並將其存儲在安裝目錄下的子目錄

例如:。

  • MyWPFApp.exe
  • 資源\
  • 資源\ pdf1.pdf ...

您還可以添加他們作爲資源和嵌入式複製到輸出目錄編輯資源屬性。

+0

最好將文件分離到您的應用程序文件中。這將使應用更易於維護。 – Russell

+0

正如我上面所說,我可能會找出一個解決方案,因爲應用程序的「協作性」(可以這麼說:-),因此資源放置在服務器文件夾上)感謝您的輸入! –

1

有幾種文件分發方法。

首先,如果您在Intranet應用程序中進行部署,您可以在其中訪問某個共享服務器位置,則可以將這些文件存儲在共享路徑中。您可以在數據庫中爲每個有問題的資源保存完整(絕對)路徑。

二是將數據存儲在用戶可訪問的文件夾(AppData或類似文件)中。我也喜歡羅素的回答...

另一種方式是將數據本身的數據存儲爲二進制內容。顯然,這會顯着增加數據庫的大小,並且這些文件不容易用於「定製」訪問,但這通常是一件好事,因爲如果有人在文件的外部刪除/移動/重命名文件,應用程序不必擔心應用。

+0

我可能會用你的第一個建議,將文件加載到服務器上。這將允許多個用戶通過應用程序添加/更新/刪除資料。這也確保人們擁有最新的材料。 想到的另一件事是緩存已查看的材料。因爲如果每次都下載文件,恐怕會給網絡帶來很大的負擔。不知道是否有.net環境中提供的緩存機制來執行此操作。 –

+0

如果你想創建一個緩存,而不是在本地緩存在客戶端(因爲如果它在服務器上,沒有太多的優化增益,因爲你必須獲取整個文檔)。這帶來了其他問題:與原始副本同步(如果有人在此期間進行更改)等,但在我們的案例中,我們發現創建文檔緩存通常不值得在Intranet上付出努力,因爲它通常是1GB網絡,可以非常輕鬆地毆打文檔傳輸... – veljkoz

+0

我想我會把緩存放在更遠的地方。我會等着看服務器上所有文件的性能。感謝您的建議和反饋! –