Я думаю Linux / Unix не использует ту же механику блокировки, потому что они создаются с нуля как многопользовательская система - который ожидал бы возможность многочисленных пользователей, использующих тот же файл, возможно, даже в различных целях.
там преимущество для блокировки? Ну, это могло возможно уменьшить сумму указателей, которыми должна будет управлять ОС, но теперь дни сумма сбережений довольно незначительна. Самое большое преимущество, о котором я могу думать к блокировке, является этим: Вы сохраняете некоторую просматриваемую пользователем неоднозначность. Если пользователь выполняет двоичный файл, и пользователь b удаляет его, то фактический файл должен слоняться поблизости, пока процесс пользователя A не завершается. Все же, если Пользователь B или какие-либо другие пользователи будут считать файловую систему для него, они не будут в состоянии найти его - но это продолжит занимать место. Едва ли огромное беспокойство мне.
я думаю в основном, что это - больше вопроса на назад совместимости с файловыми системами окна.
Универсальные шаблоны, как правило, не поддерживаются ни в одном сценарии взаимодействия. И P / Invoke, и COM-взаимодействие завершатся ошибкой, если вы попытаетесь маршалировать универсальный тип или значение. Следовательно, я ожидаю, что Marshal.SizeOf не будет протестирован или не поддерживается для этого сценария, поскольку это функция, специфичная для маршала.
Неизвестно, какой размер будет у агрегированного объекта T (это будет размер указателя, если T является ссылочным типом, и в основном любое значение, если это тип значения).
Я думаю, вы можете решить эту проблему, установив атрибут MarshalAs в поле «значение», указав наиболее подходящий тип (например, Unmanagedtype.SysInt). Обратите внимание, что он по-прежнему не будет работать для так называемых неотображаемых типов (т.е. типов, для которых смещения и размеры полей не могут быть легко определены).
Но, AFAIK, не рекомендуется использовать универсальные шаблоны во взаимодействии.