RAM测试应用程序如何工作? C#示例?

问题描述:

RAM测试应用程序如何工作,是否可以使用C#编写(例如)?RAM测试应用程序如何工作? C#示例?

+5

你不能在任何.NET语言(如C#)中编写RAM测试应用程序。您需要在机器级别看到事物,并且虚拟机会隐藏此信息。 – user142350 2009-08-20 15:18:40

您基本上写入RAM,读回来并将其与预期结果进行比较。您可能想要测试各种模式以检测不同的错误(始终为0,始终为1),并运行多次迭代来检测虚假错误。

只要您可以直接访问要测试的内存,就可以使用任何您喜欢的语言来执行此操作。如果你想测试物理内存,你可以使用P-invoke来访问CLR。

但是,如果您的计算机基于Von Neumann architecture,则这不会解决某个特定问题:测试内存的程序实际上位于相同的内存中。你将不得不重新安置程序来测试它。德国杂志没有找到解决这个问题的方法Ramtest:他们从视频内存中运行测试。在实践中,这对C#来说是不可能的。

+0

有可能让程序从CPU缓存中运行(有一些技巧)并让它测试DRAM。 – 2009-08-20 15:57:05

大多数情况下使用低级硬件访问将各种位模式写入内存,然后将其读回以确保它们与写入的模式相同。否则,RAM可能有问题。

它们通常使用低级语言(汇编程序)编写以直接访问RAM - 这样可以避免任何缓存(可能会影响测试结果)。

在C#中编写这样的应用程序当然是可以的 - 但这几乎肯定会阻止您直接访问内存,因此永远不可能像低级内存测试人员那样彻底或可靠。

正如一些试图用C语言编写memtest程序的Linux专家发现的,任何这样的程序都必须编译为裸硬件或无MMU操作系统才能生效。

我不认为C#编译器可以做到这一点。

您可能无法像Windows中的C语言程序那样从Windows中的C#程序测试内存,但您仍然可以做一些有用的工作。

您将需要使用本机Windows API(通过dllimpott和P/invoke)来分配sone内存并将其锁定到RAM中。一旦你完成了,读取和写入模式到内存是非常容易的。

在测试结束时,您可以告诉用户您可以测试多少内存。