2010-06-09 69 views
1

在我的程序中,我有一個方法,每次調用時都需要打開大約4個文件,因爲我需要取一些數據。所有這些數據都來自文件,我一直在存儲在列表中進行製造。 我大概需要調用這個方法大約10000次,這使得我的程序非常慢?如何加快代碼?

以更好的方式處理這些文件的任何方法,並且將整個數據存儲在列表中,耗時列表更好的替代方法是什麼?

我可以提供一些代碼,但我之前的問題已關閉,因爲它只是困惑每個人,因爲它是大程序的一部分,需要完全解釋才能理解,所以我沒有給出任何代碼,請建議思路這是一個普遍的問題...

在此先感謝

+1

該方法每次調用時都使用整個文件?它可以例如使用數據庫嗎?如果是這樣的話,我會考慮將文件內容轉儲到SQLite數據庫中,並使用SQL來查詢每次調用所需的數據。 – 2010-06-09 14:31:44

+0

你的檔案有多大? – tanascius 2010-06-09 14:32:37

+0

是的,它使用整個文件,每次它被稱爲.. 我的文件是每個約500kb – kaushik 2010-06-09 15:29:32

回答

1

將數據加載到數據庫並在數據庫中放置一些索引可能會更好。然後,對數據進行簡單查詢將會非常快速。您不需要很多工作來設置數據庫。您可以創建一個SQLite數據庫,而不需要單獨的進程,並且它沒有複雜的安裝過程。

2

打開,關閉和讀取文件10000次總是將是緩慢的。你可以打開文件一次,在列表上執行10,000次操作,然後關閉文件一次?

+0

沒辦法,我每次我打開不同的文件.. – kaushik 2010-06-09 15:35:02

3

作爲一般策略,如果數據是靜態的並且相對較小,則最好將這些數據保存在內存中。然後,10k調用將讀取內存中的緩存而不是文件。快多了。

如果您正在修改數據,替代方案可能是像SQLite這樣的數據庫,或嵌入式MS SQL Server(也有其他的!)。

目前尚不清楚什麼這是數據。它是簡單的配置/屬性數據?有時你可以找到庫來處理這些數據的加載/操作/存儲,並且它通常擁有自己的內部內存緩存,你只需要調用一個或兩個函數即可。

沒有關於這些文件的更多信息(它們有多大?)和數據(它是如何格式化和結構化的?),很難多說。

+0

我有大約3200個文件,每個大約400kb..for每個調用這些文件4將被使用..我將只使用文件數據不會manupalate file.i中的數據只需要讀它們。它只是屬性數據每行有5個字.. – kaushik 2010-06-09 15:33:20

+0

我找到你的想法有趣的是,如何在緩存中存儲? – kaushik 2010-06-09 15:34:05

+0

嗯,我猜你的數據看起來像這樣: '屬性1 = word1 word2 word3 word4 word5'。你可以創建一個散列表,其中'property1'是值'word1 word2 word3 word4 word5'的關鍵字。在應用程序啓動時設置哈希表,然後每隔一段時間需要數據,訪問哈希表而不是文件。 – FrustratedWithFormsDesigner 2010-06-09 15:42:17

0

從要運行的方法的調用方法中調用對文件的打開。將數據作爲參數傳遞給方法

0

如果文件是結構化的,有點類似於配置文件,那麼可以使用ConfigParser庫,否則如果你有其他的結構格式,那麼我認爲最好是存儲所有這些數據以JSON或XML格式,並對您的數據執行任何必要的操作