0
我正在加載一個巨大的數據集到內存中。代碼基本上循環遍歷DataTable,並將DataRow中的值複製到int
變量中。出於某種原因,我在循環過程中聲明的變量幾乎比在方法頂部聲明的變量快兩倍。爲什麼實例化內聯變量會導致代碼更快?
下面是Ants Perf Profiler的屏幕截圖。正如你可以,行siteID = (int) oDR[FIELD_SITE_ID]
幾乎是前一行的兩倍。爲什麼會這樣?
我正在加載一個巨大的數據集到內存中。代碼基本上循環遍歷DataTable,並將DataRow中的值複製到int
變量中。出於某種原因,我在循環過程中聲明的變量幾乎比在方法頂部聲明的變量快兩倍。爲什麼實例化內聯變量會導致代碼更快?
下面是Ants Perf Profiler的屏幕截圖。正如你可以,行siteID = (int) oDR[FIELD_SITE_ID]
幾乎是前一行的兩倍。爲什麼會這樣?
難道不是是oDR[FIELD_SITE_ID]
就是很慢嗎?嘗試將其分配給循環中的變量,然後將其分配給變量siteID
。如果我是正確的,你應該看到罰款已經從你的sideID
轉讓轉移到從oDR
獲得價值的陳述。
int siteIDtmp = (int)oDR[FIELD_SITE_ID];
siteID = siteIDtmp;
您是否嘗試過從數據集中提取相同的字段?它可能與基礎數據類型綁定,併爲'oDR [FIELD_SITE_ID]' – DiskJunky 2013-02-19 22:26:54
特定的轉換。你是否嘗試過在同一個循環內實例化'siteID'? – MyCodeSucks 2013-02-19 22:27:42
也許在行上查找'FIELD_SITE_ID'只需要比'FIELD_BREAK_ID'更長的時間。 – Magnus 2013-02-19 22:29:01