Глобальный словарь против GCHandle - PullRequest
1 голос
/ 07 сентября 2010

Мне необходимо передать какой-то идентификатор в неуправляемый код, который затем обрабатывает запрос и перезванивает в мой управляемый код, как только он выполняет некоторую обработку.

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

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

До

Ответы [ 2 ]

1 голос
/ 07 сентября 2010

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

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

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

0 голосов
/ 07 сентября 2010

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

...