Взаимодействие: способ возврата параметра в пустоту


Для взаимодействия цель, это то, что я всегда делаю (на C#):

 public static extern BigObject InteropWithCPlusPlus();

где BigObject находится ( Вы угадали) большой объект, это не что-то маленькое, как инт, или двойной.

Сейчас, это хорошая практика? Или это лучше сделать Interop в этот путь:

public static extern void InteropWithCPlusPlus(ref BigObject bigObject);

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



378
5
задан 9 февраля 2011 в 03:02 Источник Поделиться
Комментарии
1 ответ

Я не думаю, что было бы слишком велика разница. Вы должны в любом случае использовать ссылку, потому что неместные типы хранятся в виде ссылок. На процессорах x86, возвращает помещаются в регистрации, которая ограничена длина. Так, на C++ программа будет либо возврат ссылки на BigObject или изменении существующего экземпляр.

Область, где я могу увидеть снижение производительности при выделении памяти. Если вы делаете звонок, используя объект, а затем выбросить его, было бы быстрее создать на один экземпляр в C# код и использовать, что вместо того, выделение памяти каждый раз. Вы получите меньшую отдачу на небольшом количестве звонков, хотя, если у вас есть пару тысяч в данной программы, вы, вероятно, не заметил удар в любом случае.

4
ответ дан 9 февраля 2011 в 04:02 Источник Поделиться