Для начала вам нужно что-то вроде:
SELECT TOP 5
ID,
[Case ID],
[Owner],
Rnd(-Timer()*[ID]) AS RandomRecord
FROM
[Cases]
ORDER BY
Rnd(-Timer()*[ID]);
для использования в качестве подзапроса, отфильтрованного по OwnerID таблицы ваших владельцев.
Однажды я опубликовал статью на эту тему с более подробной информацией:
Рассмотрение стека вызовов, кажется, что рассматриваемый стек использует ReaderWriterLock, блокирующий механизм.
1130e410 00f24557 mscorwks!CRWLock::StaticAcquireWriterLockPublic+0xc9
Изменитесь на поток 9 и использование выполненный sos.dll! dso для разгрузки управляемого объекта ReaderWriterLock. Затем выполненный! сделайте на этом объект ReaderWriterLock. Я полагаю, что существует поле потока владения, которое можно запросить. Я буду тестировать его и видеть.
Старый школьный способ определить это состоит в том, чтобы выполнить ~ *e! clrstack и исследуют все управляемые потоки, которые ожидают на readerwriter, блокируют и затем видят, можно ли найти поток, который ввел ту же функцию, но прошел через блокировку (т.е. другое смещение)
Спасибо, Aaron
Примечание: Не уверенный, если существует способ связать сообщения, но этот очень похож на
Как я нахожу lockholder (читатель) моего ReaderWriterLock в windbg
Можно вырыть это из дампа ядра.
Теперь, насколько ядро, отлаживающее, идет, livekd от sysinternals должно быть достаточным, но к сожалению это только применимо в рабочей системе.
Существует также инструмент приобретения памяти привилегированного режима, который мог бы быть полезным для взятия дампа с (в земельном участке windbg) для более позднего контроля.
Иначе, включая трассировку дескриптора (! htrace - включают) и (если код, уникальный для особого потока), владение дескриптора могло бы быть заключено из отслеживания стека.
Используйте команду ! htrace
, чтобы получить идентификатор потока. Вы должны сначала, возможно, в начале программы, включить сбор трассировки с помощью ! Htrace -enable
.
0:001> !htrace 00003aec -------------------------------------- Handle = 0x00003aec - OPEN Thread ID = 0x00000b48, Process ID = 0x000011e8 ...
Приведенный выше результат является вымышленным, он будет другим для вашей системы. Но он предоставит вам необходимую информацию - идентификатор потока (0x00000b48 в моем примере). необходимо перезапустить исходный процесс на компьютере пользователя, поэтому не может отлаживать живую сессию.
Я не уверен на 100%, но думаю, что это сработает:
! htrace -enable
qd
. Исполняемый файл будет продолжен.