Необходимо ли использовать указатели (небезопасный код) в C#?

Если javers.sqlSchemaManagementEnabled=true, Javers создает таблицы SQL, если они еще не существуют.

Здесь проверено:

https://github.com/javers/javers/blob/master/javers-persistence-sql/src/main/java/org/javers/repository/ sql / schema / JaversSchemaManager.java # L215

Трудно сказать, почему это не работает в вашем случае, попробуйте отладить этот код, используя последнюю версию Javers.

43
задан Kredns 17 February 2010 в 03:08
поделиться

11 ответов

От "Человека" самого:

использование указателей редко требуется в C#, но существуют некоторые ситуации, которые требуют их. Как примеры, с помощью небезопасного контекста для разрешения указателей гарантирован следующими случаями:

  • Контакт с существующими структурами на диске
  • Усовершенствованный COM или Платформа Вызывают сценарии, которые связали структуры с указателями в них
  • Критический по отношению к производительности код

, использованию небезопасного контекста в других ситуациях препятствуют.

А именно, небезопасный контекст не должен использоваться, чтобы попытаться написать код C в C#.

Осторожность:

Код записанное использование небезопасного контекста не может быть проверено для сейфа, таким образом, это будет выполняться только, когда коду будут полностью доверять. Другими словами, небезопасный код не может быть выполнен в недоверяемой среде. Например, Вы не можете выполнить небезопасный код непосредственно из Интернета.

Ссылка

36
ответ дан nzpcmad 26 November 2019 в 22:48
поделиться

Если Вы имеете к.

Говорят, что Вы нуждаетесь к фиктивному цвету в большом полутоновом изображении, говорите 2000x2000 пикселей. Сначала запишите 'безопасную' версию с помощью GetPixel() и SetPixel(). Если это работает, большое, движение. если это оказывается слишком медленным, Вы, возможно, должны достигнуть фактические биты, которые составляют изображение (забудьте о Матрицах цветов ради примера). Нет ничего 'плохо' об использовании небезопасного кода, но это добавляет сложность к проекту и должно таким образом использоваться только при необходимости.

21
ответ дан JYelton 26 November 2019 в 22:48
поделиться

Я не могу помнить когда-либо иметь необходимость сделать так - но я не сделал большого количества interop. Это - наиболее распространенное приложение, я верю: вызов в собственный код. Существуют буквально несколько раз, где использование указателей позволяет Вам оптимизировать некоторый код, но это довольно редко, по моему опыту.

, Если это - какое-либо руководство, я считаю, что довольно опытен в C#, но если бы я должен был сделать какой-либо небезопасный код, то я должен был бы консультироваться со СПЕЦИФИКАЦИЕЙ/КНИГАМИ/MSDN для руководства меня. Конечно, будет много людей, которые довольны небезопасным кодом, но менее знакомы с (говорят) выражения запроса...

12
ответ дан Jon Skeet 26 November 2019 в 22:48
поделиться

Я сказал бы, что основные вопросы are:-

  • Небезопасный код не поддаются проверке. Это означает, что код может только быть работали пользователем от совершенно доверяемого контекста, таким образом если Вам когда-нибудь нужен пользователь для выполнения кода откуда-либо меньше, чем совершенно доверяемый (например, сетевой ресурс, не настроенный, чтобы быть так), Вы завинчены.
  • Отсутствие verifiability (гм не уверенный, если это - на самом деле слово) также означает, что Вы могли потенциально , портят память в Вашей программе. Вы потенциально возвращение целых классов ошибок в Ваше приложение - переполнение буфера, висячие указатели, yada yada фу фу. не говоря уже о том, чтобы быть в состоянии потенциально для повреждения структур данных в памяти, не понимая, когда указатель идет странный.
  • , Если Вы хотите, чтобы Ваш небезопасный код получил доступ к управляемым объектам, необходимо 'прикрепить' их. Это означает, что GC не позволяют переместить Ваш объект в памяти, и таким образом управляемая "куча" может стать фрагментированной. Это имеет последствия производительности; поэтому всегда важно определить, не перевешивается ли какое-либо потенциальное усиление перфекта этой проблемой.
  • Ваш код становится более твердым понять для программистов, не привыкших к неуправляемому подходу. Они могут тогда быть более склонны стрелять в ногу прочь из части 'свободы', которую небезопасный код дает им.
  • Вы становитесь способными написать небезопасный с точки зрения типов код; это действительно скорее устраняет большое преимущество хорошего теплого нечеткого управляемого языка. Теперь можно встретиться с ужасными проблемами безопасности типов. Почему делают тот шаг назад?
  • Это делает Ваш код более ужасным .

я уверен, что существует больше, который мог быть добавлен к списку; в целом, как других сказали - избегают, если у Вас нет to.e.g. вызов неуправляемого метода через p/invoke, который требует некоторого специального указателя funking. Даже тогда marshaller главным образом предотвратит потребность в нем, главным образом.

'Человек, которые, как' также говорят, избегают, если не необходимо в основном.

, О, хорошая статья о прикреплении здесь на MSDN между прочим.

6
ответ дан ljs 26 November 2019 в 22:48
поделиться

Небезопасный код является полностью поддерживаемой функцией CLR.NET. Преимущества являются производительностью и совместимостью с двоичным кодом. Время выполнения является песочницей, которая препятствует тому, чтобы Вы отказали и горели, но это идет со стоимостью. В ситуациях, где Вы делаете чрезвычайно интенсивные действия против больших блобов в памяти, например, обработка изображения, это быстрее для продвижения вне нормальной безопасности, которую обеспечивает время выполнения.

, Что быть сказанным, я думаю большинство , люди здесь сказали бы, "не делают этого". Подавляющее большинство разработчиков.NET не столкнется со случаем в их нормальных операциях, которые могут только быть решены при помощи небезопасного кода.

3
ответ дан Rex M 26 November 2019 в 22:48
поделиться

Я использовал небезопасный код использовать олицетворение для предоставления сервисного доступа к сетевым ресурсам. Это не проблема, если Вы знаете то, что Вы делаете.

3
ответ дан Otávio Décio 26 November 2019 в 22:48
поделиться

Необходимо использовать их при необходимости в них; главным образом это будет при контакте с некоторыми хитрыми interop сценариями (например, когда я записал управляемую оболочку для DPAPI в.NET 1.0, они были необходимы), но достаточно редко это могло бы быть должно улучшить производительность (после того, как профилирование!) при помощи stackalloc или подобный.

Это рекомендуется Microsoft в так же, как они - разработчики C#, и они приняли решение добавить возможность записать unsafe код в нем. Вы видите от выбора ключевого слова и требования для формирования рисунка методов/классов, в которых Вы пишете это с помощью ключевого слова, что это не разработано, чтобы быть фактическим выбором реализации.

2
ответ дан Greg Beech 26 November 2019 в 22:48
поделиться

курс, который это не "рекомендуется", вот почему это маркировано "небезопасным". Но не позволяйте этому отпугнуть Вас. Хотя, это должно заставить Вас посмотреть дважды на свой код. Возможно, существует управляемый способ сделать это?

1
ответ дан Al W 26 November 2019 в 22:48
поделиться

Reinterpretive как броски, не предоставленные BitConverter.
Конкретно преобразование unint в интервал для хеш-функций, где все Вы заботитесь о, является битами.

Используя некоторых полезных, хорошо обоснованный о c или C++ идиоматические функции на структурах, где необходимо рассматривать их как байт* известной длины, снова самой полезной для хеширования.

Чрезвычайно быстрая двоичная сериализация (очень конкретного) в структурах памяти (путем выполнения его к массиву их), хотя быть честным, это лучше сделано, просто спав до C++ / CLI.

нужно сказать, что во многих случаях указатели требования задачи могут часто решаться лучше путем выполнения его в C++ / CLI и затем импорта этого в Вас c# проект как dll. Это не изменяется, 'безопасен' ли код или не, но это делает набор из полезных функций для работы на основанных на указателе структурах более доступным. Это также позволяет Вам иметь предосудительные отношения с универсальными типами или перечислениями, если Вы действительно хотите.

вероятность большинства разработчиков, бывших должных сделать, это действительно удаленно. Полезный, когда Вам нужен он хотя...

2
ответ дан ShuggyCoUk 26 November 2019 в 22:48
поделиться

использующий Небезопасный код похож на упущение benenfits.Net Framework, я привык их однажды для созданных старомодных структур как стеки и материал, но это было только для школы, в наше время у меня не было потребности использовать их.

1
ответ дан Oscar Cabrero 26 November 2019 в 22:48
поделиться

Сделайте это, если это делает Ваш код короче и более ясный.

"Следуют за Вашими наклонами с должным вниманием полицейскому за углом". WSM

1
ответ дан daonb 26 November 2019 в 22:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: