我有Posrgres 9.04數據庫表超過12,000,000行。Postgres和Npgsql並行或PLINQ
我需要一個程序來讀取每一行,做一些計算和查找(針對第2臺),然後寫在第3表中的新行,這些計算的結果。完成後,第三個表的行數將與第一個表的行數相同。
上的酷睿i7 720QM處理器連續執行時間超過24小時。它只徵收8個內核之一(4個物理內核,但8個通過HTT對Windows 7可見)。
我想加快並行。我以爲我可以使用PLINQ Npgsql的和:
NpgsqlDataReader records = new NpgsqlCommand("SELECT * FROM table", conn).ExecuteReader();
var single_record = from row in records.AsParallel()
select row;
不過,我得到一個錯誤records.AsParallel()
:找不到源類型「System.Linq.ParallelQuery」的查詢模式的實現。 '選擇'未找到。考慮顯式指定範圍變量'row'的類型。
我已經做了很多的谷歌搜索,我只是來了更多的困惑。 NpgsqlDataReader從System.Data.Common.DbDataReader,進而實現IEnumerable的,它具有進行AsParallel擴展,所以似乎是一個正確的東西繼承是在地方得到這個工作?
這不是很清楚,我什麼,我甚至可以做明確指定的範圍變量的類型。看來最好的做法是而不是來指定這個。
我願意切換到DataSet中,假設這是PLINQ兼容,但寧願避免,如果可能的,因爲1200萬行。
這甚至可以用Npgsql實現嗎?我需要使用Devart的dotConnect for PostgreSQL嗎?
UPDATE:剛發現http://social.msdn.microsoft.com/Forums/en-US/parallelextensions/thread/2f5ce226-c500-4899-a923-99285ace42ae,害得我試試這個:
foreach(IDataRecord arrest in
from row in arrests.AsParallel().Cast <IDataRecord>()
select row)
到目前爲止在IDE中沒有錯誤,但這是構建這種有道?
我可能會說廢話,但你是否嘗試使用Npgsql的.net 4.0版本。它是針對可以給你Linq支持的EF編譯的。我希望它有幫助。 – 2011-05-07 22:55:55
@FranciscoJunior - 謝謝。是的,我使用** Npgsql2.0.11中的DLL。91-bin-ms.net4.0.zip **。在Visual Studio 2010中,DLL的** Runtime Version **字段是** v4.0.30319 **。 – 2011-05-08 02:41:39
嗯,那麼也許爲了讓AsParallel工作,Npgsql裏可能需要一些支持。我會檢查如何做到這一點,並會讓你知道。剛看到你的編輯。它到目前爲止如何。你是否從中獲得了性能優勢? – 2011-05-08 16:48:11