我已經開始對項目數據的,這裏是我有:含有450K記錄搜索大型Excel文件和處理大量有效
Excel文件(exl1),具有50K以上每月。
exl1格式
invoice#|Box#|Serial-#1|Serial-#2|5-val-enum#1|5-val-enum#2|10-val-enum|4-val-enum|timestamp
EX1: abc123|box1|0987654321|A123456789|Plant|Tree|PersonName1|North|DateTime.Now
EX2:含大約50K記錄 qwe345|box9|123456789|#NA|Animal|Cat|PersonName1|South|DT.Now
Excel文件(exl2)。 (名爲searchcVal爲了解釋的目的) exl2格式 接口Serial1
EX1A: A123456789
EX1B: 0987654321
EX2A: 123456789
這是我必須做的:
取決於5-VAL-枚舉exl1的#1的值在exl2(searchval)的每個值進行比較,以任一序列號1或序列號2(例1 =植物,示例2 =動物)
如果searchVal以[az]搜索serial2開頭,否則搜索serial1;因此,與searchVal EX1A搜索COL3和serachval EX1B搜索COL2
if (exl1.Rows[columnHeader][col4].ToString() == "Plant") { string rowVal = exl2.Rows[rowIterator][col0].ToString(); if (regex.IsMatch(rowVal[0].ToString()))//checks to see if serial1 or serial2 { if (rowVal == exl1.Rows[rowIterator][col3].ToString()) { //add matched row to ResultsDT } else { //next row } } else { //search col2 with same procedure } } else {//search col2 }
爲了解釋讓說着想PERSON1匹配的400個工廠,其中100人是樹木,100種人是灌木,有100個人是草和100開滿鮮花, 他匹配了400只動物,其中100只是貓,狗,蛇和鳥類。這些匹配我想總結一下 的輸出摘要1:PersonName | Plants | Animals | category3 | Category4 | Category5對每個類別都有更詳細的描述,例如 概要2:PersonName | Trees | Bushes | Grasses |通向SUMM1的花:Person1 | 400 | 400 | x | n | y SUMM2(僅限植物):Person1 | 100 | 100 | 100 | 100
最重要的是:所有這些都不會殺死它正在運行的PC 3小時,同時其計算
原諒我,如果我聽起來像一個白癡,但是有建議的內存結構的原因嗎?我必須通過所有的記錄,所以所有的信息是必要的。 另外,有沒有你推薦的書? – Dani
啊我的錯誤,我理解你的一組50k記錄與你的較大記錄集的格式相同(你的解釋有點難以理解);如果它完全由長達20個字符的字符串組成,那麼可以做更多的事情來使事情更快。 [CLR的算法簡介](http://en.wikipedia.org/wiki/Introduction_to_Algorithms)或多或少是算法ABC的goto書,但我懷疑它對於你想要的算法來說有點重量級/低ROI做。 – Caspar
也許我的C#只是生鏽了,但是從你的示例中我不清楚你是如何讀取你的excel文件的。你是否正在使用一個庫來讀取一個.xls(x)文件(如果是的話,那個庫將整個文件轉儲到內存中,或者根據需要從磁盤讀取),還是解析csv導出(或類似的)數據? – Caspar