【发布时间】:2009-08-20 15:14:49
【问题描述】:
RAM 测试应用程序究竟是如何工作的,是否可以使用 C#(示例)编写这样的应用程序?
【问题讨论】:
-
您无法使用任何 .NET 语言(如 C#)编写 RAM 测试应用程序。您需要查看机器级别的内容,而虚拟机会掩盖这些信息。
RAM 测试应用程序究竟是如何工作的,是否可以使用 C#(示例)编写这样的应用程序?
【问题讨论】:
大多数使用低级硬件访问将各种位模式写入内存,然后将它们读回以确保它们与写入的模式相同。如果不是,RAM 可能有故障。
它们通常用低级语言(汇编程序)编写以直接访问 RAM - 这样就可以避免任何缓存(可能会影响测试结果)。
当然可以用 C# 编写这样的应用程序 - 但这几乎肯定会阻止您直接对内存进行位级访问,因此永远不会像低级内存测试仪那样彻底或可靠。
【讨论】:
您基本上是写入 RAM,读回它并将其与预期结果进行比较。您可能想要测试各种模式以检测不同的错误(always-0、always-1),并运行多次迭代来检测虚假错误。
只要您可以直接访问要测试的内存,您就可以使用任何您喜欢的语言来执行此操作。如果您想测试物理 RAM,可以使用 P-invoke 伸出 CLR。
但是,如果您的计算机基于Von Neumann architecture,这将无法解决一个特定问题:测试内存的程序实际上位于同一内存中。您将不得不重新定位程序以测试所有内容。德国杂志 c 没有为他们的Ramtest 找到解决此问题的方法:他们从视频内存中运行测试。实际上,这在 C# 中是不可能的。
【讨论】:
正如一些试图用 C 语言编写 memtest 程序的 Linux 大师发现的那样,任何此类程序都必须经过编译才能在裸硬件或无 MMU 操作系统上运行才能有效。
我认为任何 C# 编译器都无法做到这一点。
【讨论】:
在 Windows 中使用 C# 程序测试内存的工作可能不如在没有操作系统的情况下运行的 C 或汇编语言程序中那样出色,但您仍然可以做出一些有用的东西。
您将需要使用本机 Windows API(通过 dllimpott 和 P/invoke)来分配内存并将其锁定到 RAM 中。一旦你这样做了,在内存中读取和写入模式就很容易了。
在测试结束时,您可以告诉用户您能够测试多少他们的记忆。
【讨论】: