2009-08-20 40 views

回答

2

您基本上寫入RAM,讀回來並將其與預期結果進行比較。您可能想要測試各種模式以檢測不同的錯誤(始終爲0,始終爲1),並運行多次迭代來檢測虛假錯誤。

只要您可以直接訪問要測試的內存,就可以使用任何您喜歡的語言來執行此操作。如果你想測試物理內存,你可以使用P-invoke來訪問CLR。

但是,如果您的計算機基於Von Neumann architecture,則這不會解決某個特定問題:測試內存的程序實際上位於相同的內存中。你將不得不重新安置程序來測試它。德國雜誌沒有找到解決這個問題的方法Ramtest:他們從視頻內存中運行測試。在實踐中,這對C#來說是不可能的。

+0

有可能讓程序從CPU緩存中運行(有一些技巧)並讓它測試DRAM。 – 2009-08-20 15:57:05

4

大多數情況下使用低級硬件訪問將各種位模式寫入內存,然後將其讀回以確保它們與寫入的模式相同。否則,RAM可能有問題。

它們通常使用低級語言(彙編程序)編寫以直接訪問RAM - 這樣可以避免任何緩存(可能會影響測試結果)。

在C#中編寫這樣的應用程序當然是可以的 - 但這幾乎肯定會阻止您直接訪問內存,因此永遠不可能像低級內存測試人員那樣徹底或可靠。

1

正如一些試圖用C語言編寫memtest程序的Linux專家發現的,任何這樣的程序都必須編譯爲裸硬件或無MMU操作系統才能生效。

我不認爲C#編譯器可以做到這一點。

0

您可能無法像Windows中的C語言程序那樣從Windows中的C#程序測試內存,但您仍然可以做一些有用的工作。

您將需要使用本機Windows API(通過dllimpott和P/invoke)來分配sone內存並將其鎖定到RAM中。一旦你完成了,讀取和寫入模式到內存是非常容易的。

在測試結束時,您可以告訴用戶您可以測試多少內存。