我正在進行一個小剛體模擬。我使用Irrlicht引擎進行顯示,並使用openMesh來處理網格。C++在ntdll中發現性能問題 - 如何擺脫它?
現在我異型使用VerySleepy我的應用程序,發現大部分的時間在下面的函數中花費(不包括時間子函數花):
RtlCompareMemoryUlong 30%模塊中「NTDLL」的資源文件「未知」
KiFastSystemCallRet 21%以內模塊 「NTDLL」 的資源文件 「未知」
RtlFillMemoryUlong 9%模塊內 「NTDLL」 的資源文件 「未知」
這樣的50%的時間在噸廢軟管功能,我不會從我的代碼中的某處調用它們,我不明白他們在做什麼。我懷疑它連接到圖形,因爲我只顯示非常簡單的網格。
有人可以給我一個關於如何弄清楚爲什麼這些函數被調用以及如何擺脫它的提示嗎?
謝謝!
但爲什麼我的應用程序仍然會進入intno Kernel模式?我認爲上下文切換很昂貴,所以我應該避免它們,不是嗎?我的應用程序是單線程的 – genesys 2009-12-27 02:18:03
內核轉換不是上下文切換 - 上下文切換是線程的量程到期或線程產生時。你應該儘量減少兩者;但是要做系統級的工作,比如繪圖或者任何與硬件有關的事情,這是不可避免的。 – 2009-12-27 05:42:55
你的應用程序進入內核模式,因爲你調用了一個需要它的函數。正如這個答案所說的,忽略ntdll本身,並專注於你自己的功能。出於某種原因,他們發現有必要調用涉及切換到內核模式的系統函數。你不能優化內核,但是你可以*優化你調用這些系統函數的頻率。 – jalf 2009-12-27 16:11:58