2012-07-26 57 views
0

我正在製作組合生成器。對於少量的元素,對於計算機而言,數據存儲在RAM內存中而不是文件中並不成問題。但是,當元素數量變大時,我的計算機內存不足(發生OutOfMemoryException異常)。這些組合是存儲在列表中的數字,當前正在存儲在另一個列表中。將數據存儲到自定義文件中

但是,這只是第一步 - 生成器正常工作。我希望將數據存儲在文件中,從不同的程序中可以提取所需的組合。大多數情況下,我需要將數據存儲在單獨的文件中,因爲生成器必須能夠在未來創建更多,更大的組合。計算機必須讀取數據的某些部分,而不是將其全部存儲在臨時存儲器中,因爲這是不可能的。

我不想將數據轉換爲文本,並在需要時將文本轉換回數據。我認爲這會使轉換速度變慢。我希望列表可以存儲到自定義文件中,程序可以直接從中提取數據,而無需進行任何轉換。

+1

您需要以二進制格式存儲數據,或使用數據庫。 – 2012-07-26 14:54:19

+1

這是很好的背景資料,但在任何地方似乎都沒有問題。另外,你是否有一些特定的問題與代碼?如果是這樣,請發佈您到目前爲止所嘗試的內容。 – JYelton 2012-07-26 14:54:23

回答

2

有一個很好的寫了關於如何將列表序列化爲<>http://www.switchonthecode.com/tutorials/csharp-tutorial-serialize-objects-to-a-file

+0

本教程介紹瞭如何將數據轉換爲文本文件,這就是我不想做的。計算機將創建該文件,計算機將讀取它,而不是人類用戶。我想將數據存儲到非文本文件中,程序可以從中讀取數據,而無需進行任何轉換。但序列化允許將數據存儲到非文本文件中嗎?這在教程中沒有提及。 – AlexSavAlexandrov 2012-07-26 17:20:35

+0

我剛剛試過這段代碼。它有一些小錯誤,但它們很容易解決。數據文件(儘管不幸選擇了名稱)絕對不是文本文件。 – 2012-07-26 17:37:24

+0

不過,我必須弄清楚如何讓程序讀取文件。這在教程中也沒有解釋。我必須找到一種方法讓程序讀取文件的某些部分,而不讀取全部數據(否則,計算機內存將在完成讀取文件之前達到極限)。 – AlexSavAlexandrov 2012-07-26 17:41:49

3

有很多選項可供選擇我將簡要介紹一些。

  • 使用數據庫。從您的描述來看,這看起來並不是一個好的選擇,但它對於所有客戶相對而言都是最靈活快速和高效的存儲。

  • 使用您的描述中的.net序列化程序之一二進制序列化程序將是您的最佳選擇。該serlizers提供了很多優勢相對性快速和烘烤到.net內置支持和非常容易使用。

  • 使用自定義二進制格式。這將是最快的選擇,特別是如果您將它與內存映射文件結合使用。然而,二進制格式可能很難使用,並且容易搞砸。

3

如果您確實想將您的數據存儲在文件中,則可以使用BinaryFormatter類。這可能是將數據對象序列化爲二進制流的最有效方式。

但我不會建議你以這種方式生成組合,只要你不需要一次存儲它們並在此之後加載很長時間。使用懶惰代組合更好。一個接一個地完全生成,而不需要「將來生成更大的組合」(逐個生成「最大的」需要的組合 - 你可能想要改變你的生成算法 - 有很多答案,如何做到這一點)

+0

我只是問如何存儲數據。這是一個不同的問題,我將如何在這種情況下使用它。 – AlexSavAlexandrov 2012-07-26 17:37:16

相關問題