Re: [問題] 相同程式 (/clr:pure) (/clr)速度差異
※ 引述《HeyScng ( )》之銘言:
: 前文恕刪
: : --
: : ◆ From: 140.96.63.154
: : → kazuto:template應該是編譯期行為吧? 02/09 11:46
: : → horngsh:推1F 02/09 13:55
: : 推 Ebergies:如果你用的是 C# Generics 的話, 那麼它是在執行期才產生 02/09 16:08
: : → Ebergies:但只會產生一次, 如果你使用次數夠多應該是不成問題才對 02/09 16:09
: 的確我也認為template instantiation在編譯期
: 但實際在 /clr 選項編譯下(win32 console) 速度卻有明顯差異
: 測試程式碼如連結 http://nopaste.csie.org/a6909
: 執行結果:
: TestFunction1 elapsed: 2312
: TestFunction1 elapsed: 422
: 因此才懷疑 template 誤用或希望可藉compiler設定加快速度
: 因為會使用 Windows form 與 許多dll 因此必須使用 /clr
: 不過主要目的只是想要重覆程式碼少一點
: 所以如果有其他寫法可以達成 也請指教
: 謝謝
==
看程式碼和執行時間,或許跟inline有關。
猜測前面的變成傳function pointer,要多一次function call,
而後面的直接被inline掉了。
==
上面的猜測是錯的。
事實上根本沒inline,
有差的或許是是Calli和Call的差別?
前者:
ldarg.s 6 ; func$
calli D:I(II)
後者:
call ??$ReturnMax@G@@$$FYAABGABG0@Z
不過/clr:pure在那段ASM上看不出差別,
可能主要的差距是因為.NET VM做的事?
不過結論還是一樣,
能用functor就盡量用functor吧,:
環境:
Microsoft Visual C++ 2008
Intel E3200@3.2GHz
修改前:
TestFunction1 elapsed: 84334
TestFunction1 elapsed: 842
用functor的程式碼:
http://nopaste.csie.org/97383
修改後:
TestFunction1 elapsed: 499
TestFunction1 elapsed: 905
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.71.32.69
→
02/10 15:53, , 1F
02/10 15:53, 1F
→
02/10 15:53, , 2F
02/10 15:53, 2F
※ 編輯: a127a127 來自: 219.71.32.69 (02/10 16:08)
→
02/10 16:12, , 3F
02/10 16:12, 3F
→
02/10 19:16, , 4F
02/10 19:16, 4F
→
02/10 19:16, , 5F
02/10 19:16, 5F
→
02/10 19:52, , 6F
02/10 19:52, 6F
→
02/10 19:56, , 7F
02/10 19:56, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 7 之 9 篇):