Большинство используют низкоуровневый аппаратный доступ для записи различных битовых шаблонов в память, а затем считывают их обратно, чтобы убедиться, что они идентичны записанному шаблону. Если нет, возможно, ОЗУ неисправно.
Как правило, они написаны на языках низкого уровня (ассемблер) для прямого доступа к ОЗУ - таким образом, любое кэширование (которое может повлиять на результат теста) исключается.
Конечно, можно написать такое приложение на C #, но это почти наверняка помешает вам получить прямой доступ к памяти на уровне битов, и, следовательно, никогда не будет таким полным и надежным, как тестеры памяти низкого уровня.