Fody PropertyChanged Weaver вызывает проблемы с памятью

#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): введите описание изображения здесь

После (с помощью Fody): введите описание изображения здесь

Мое решение состояло в том, чтобы использовать пакет NuGet с большим адресом (цель в пакете запускается, только если вы измените целевую платформу на x86, в моем случае я сменил ANYCPU Prefer32 на просто x86). Я настроил свой файл .csproj так, чтобы он выглядел следующим образом:

  <PropertyGroup>
   <LargeAddressAware>true</LargeAddressAware>
   <LargeAddressAwareAfterTargets>FodyTarget</LargeAddressAwareAfterTargets>
 </PropertyGroup>
  

Я предупредил участников PropertyChanged.Спасибо за эту проблему.