#c# #.net #wpf #fody #fody-propertychanged
#c# #.net #wpf #fody #fody-propertychanged
Вопрос:
Я установил PropertyChanged.Fody в приложении WPF. Теперь сторонний код, использующий собственную память, испытывает проблемы с выделением памяти. Удаление PropertyChanged.Fody решает все эти проблемы. Я подумал, что пакет вызывает внедрение измененных свойств в классы в этих сборках, поэтому я добавил [assembly: PropertyChanged .filterType(«My.Specific.OptIn.Namespace.»)] проект, в котором я установил fody, чтобы сделать выбор для инъекций. Обратите внимание, что я оставил атрибут filter точно таким, каким я его только что написал, чтобы вообще ничего не совпадало, просто для проверки. Однако проблемы все еще возникают.
Комментарии:
1. Пожалуйста, уточните, что такое «проблемы с распределением памяти». Насколько нам известно, у вас может быть совершенно другая проблема, которая, как оказалось, вызывает эту проблему. На самом деле я могу назвать несколько причин, по которым это может произойти, но ясность и немного больше объяснений помогут вам получить ответ.
2. Причина неясности в том, что я знаю не так много. В стороннем интерфейсе API есть метод с именем captureImage() и другой метод с именем getImage(). При изменении свойств. Fody добавляется, вызов getImage возвращает исключение OutOfMemoryException.
3. Для всех, кто считает, что слишком мало информации и может «придумать несколько причин, почему это может произойти», пожалуйста, укажите причины. Хотя я хотел бы предоставить больше информации, это буквально все, что у меня есть.
4. Позвольте мне уточнить, вы сказали, что сторонний код имеет проблемы с выделением памяти, но откуда вы это знаете? Если вы видели что-то в окне ошибки, нам нужно точно знать, что эта ошибка говорит дословно. Если это теория, то также дайте нам знать, чтобы мы могли правильно проработать процесс устранения. Дело в том, что в вашем вопросе отсутствует информация, которая оставляет слишком много для догадок.
5. Вызовы стороннего API приводят к приостановке работы отладчика с различными ошибками 1. «Неправильное распределение» 2. «Исключение OutOfMemoryException» 3. «Изображение не найдено»
Ответ №1:
После нескольких дней отладки я наконец нашел проблему. Мой проект настроен на ANYCPU и предпочитает 32, что по умолчанию позволяет ему получать доступ к большему объему оперативной памяти. Fody не учитывает это и приводит к обычной 32-битной сборке, которая может получить доступ только к 2 ГБ оперативной памяти.
Раньше (ANYCPU предпочтительнее 32):
Мое решение состояло в том, чтобы использовать пакет NuGet с большим адресом (цель в пакете запускается, только если вы измените целевую платформу на x86, в моем случае я сменил ANYCPU Prefer32 на просто x86). Я настроил свой файл .csproj так, чтобы он выглядел следующим образом:
<PropertyGroup>
<LargeAddressAware>true</LargeAddressAware>
<LargeAddressAwareAfterTargets>FodyTarget</LargeAddressAwareAfterTargets>
</PropertyGroup>
Я предупредил участников PropertyChanged.Спасибо за эту проблему.