2015-09-24 60 views
2

我正在開發基準測試應用程序,使用通用Windows平臺評估Windows 10系統的CPU和RAM性能。RAM性能基準測試 - UWP和C#

儘管我發現了不同的算法來測試CPU,但我仍然沒有找到任何可靠的算法或解決方案來評估內存的寫入和讀取速度。

我該如何在C#中實現這一目標?

感謝提前:)

+1

老實說,我不認爲它是可能的。 RAM基準通常由專用操作系統(如內存中的Linux)運行,並運行讀/寫模式(查找memtest)。 C#不會給你對RAM的那種控制,這是你必須做的低一點的事情。你可能可以用C++編寫一些東西,然後用c#調用它。 –

+0

@RonBeyer我明白你的觀點。在對你提出的p/invoke進行了一些研究之後,從DLL調用C++函數似乎是一個合理的解決方案。 –

回答

1

我不明白爲什麼這會不會是從託管代碼可能。數組訪問代碼變成正常的x86內存指令。這是一個簡單的抽象。特別是我不明白爲什麼你需要一個定製的操作系統。

您應該可以通過在大數組上執行memcpy來測試連續內存速度。它們必須大於最後一級緩存大小。

您可以通過隨機檢索隨機訪問大數組來測試隨機訪問。索引計算必須便宜,不可預知,並且必須有一個依賴鏈將內存指令序列化,以便CPU不能並行化它們。

老實說我不認爲它是可能的。 RAM基準通常由專用操作系統運行

RAM測試不同於RAM基準測試。

C#不給你那種控制權RAM

當然,只是新的一個大陣列和訪問它。另外,瞭解目前的開銷。唯一的開銷是範圍檢查。

GC在基準測試中沒有任何影響。它可能由分配觸發。

+0

謝謝你的時間。所以它可以在C#中完成,但是在給定主要語言抽象的情況下,結果會像C++一樣可靠? –

+0

抽象成本很小。嘗試使用for循環遍歷數組並檢查生成的x86代碼。這裏沒有太多......如果你想測試連續速度,你可能應該訪問每64個字節。觸摸每個緩存行一次。 90%的代碼將等待內存。 – usr