2010-09-07 5 views
1

Мне нужно передать какой-то идентификатор неуправляемому коду, который затем обрабатывает запрос и перезвон обратно в мой управляемый код после его обработки.Глобальный словарь vs. GCHandle

Мне было интересно, было бы лучше создать GCHandle и передать его неуправляемому коду, чтобы затем восстановить объект, как только неуправляемый код передаст GCHandle, или было бы лучше создать глобальный словарь (скажем, целые числа), которые связывают объект с указанным ключом.

Спасибо за помощь!

До

ответ

0

Если у вас нет на самом деле передать управляемый объект неуправляемого кода, я бы голосовать за глобального словаря. Недостаток использования словаря может потребоваться для синхронизации потоков. Проблема с GCHandle заключается в том, что добавляет дополнительную нагрузку на GC, и вы должны делать очистку и т. Д.

+0

Мне также было интересно узнать о проблемах с производительностью. Я могу просто запустить небольшой тест и сообщить вам, что дает мне лучшие результаты. Очистка не должна быть слишком сложной. –

1

Я только что создал миллион экземпляров класса и добавил его в словарь, создав случайные целые ключи. Аналогично, я создал миллион объектов и создал для них GCHandles.

Использование GCHandles занимает около 60% времени, необходимого для добавления объектов в словарь.

Спасибо за помощь!