Повреждение памяти Avalonia WriteableBitmap в тестах XUnit/NUnit, но не в работающем приложенииC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Повреждение памяти Avalonia WriteableBitmap в тестах XUnit/NUnit, но не в работающем приложении

Сообщение Anonymous »

Я сталкиваюсь с проблемами повреждения памяти при выполнении тестов с использованием XUnit (и такое же поведение наблюдается с NUnit), даже с, казалось бы, простым кодом. Здесь нет многопоточности или сложных зависимостей. Тестовый проект настроен для автономного тестирования в соответствии с документацией Avalonia.
Вот упрощенный тестовый пример:

Код: Выделить всё

[AvaloniaFact]
public unsafe void TestWriteableBitmap()
{
var image = new WriteableBitmap(new PixelSize(1024, 1024), new Vector(96, 96), PixelFormats.Rgba8888);

using (var lockedBitmap = image.Lock())
{
//make all 0
Unsafe.InitBlock(lockedBitmap.Address.ToPointer(), 0, (uint)(lockedBitmap.RowBytes * lockedBitmap.Size.Height));

//write 0
using (var stream = File.OpenWrite($"/home/qserj1/test/000.bit"))
{
var pixels = new byte[(uint)(lockedBitmap.RowBytes * lockedBitmap.Size.Height)];
Marshal.Copy(lockedBitmap.Address, pixels, 0, pixels.Length);
stream.Write(pixels, 0, pixels.Length);
}

}

//write 1
using (var lockedBitmap = image.Lock())
{
using (var stream = File.OpenWrite($"/home/qserj1/test/001.bit"))
{
var pixels = new byte[(uint)(lockedBitmap.RowBytes * lockedBitmap.Size.Height)];
Marshal.Copy(lockedBitmap.Address, pixels, 0, pixels.Length);
stream.Write(pixels, 0, pixels.Length);
}
}
}
Тест создает WriteableBitmap, инициализирует его память нулями и записывает данные в «000.bit». Затем он снова блокирует растровое изображение и записывает данные в «001.bit». Я ожидаю, что оба файла будут содержать только нули, но второй файл ("001.bit") содержит мусорные данные.
Похоже, существует некоторая корреляция между запуском теста в режиме отладки и выпуском. режим, но это не ясно. Самое запутанное то, что когда этот код интегрируется в работающее приложение Avalonia, файлы, как и ожидалось, всегда содержат нули. Мне нужно оптимизировать процедуру, которая использует WriteableBitmap для создания изображений из сетевых данных, и я обнаружил неожиданные мусорные данные в изображениях в тестовой среде.
Как объяснить это несоответствие между тестовая среда и работающее приложение? Есть ли какие-либо особые соображения по написанию тестов с использованием WriteableBitmap в Avalonia с использованием XUnit/NUnit?
Avalonia 11.2 (11.1.4 тоже)
xUnit 2.6.6
Тестовое приложение: https://drive.google.com/file/d/1b18DcQ ... sp=sharing

Подробнее здесь: https://stackoverflow.com/questions/791 ... ot-in-runn
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Повреждение памяти Avalonia WriteableBitmap в тестах XUnit/NUnit, но не в работающем приложении
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • NUnit, я использую посредник, как проверить мой обработчик посредника с помощью NUnit
    Гость » » в форуме C#
    0 Ответы
    49 Просмотры
    Последнее сообщение Гость
  • Драйвер NUnit 3 обнаружил ошибку при выполнении отраженного кода (NUnit.Engine.NUnitEngineException).
    Anonymous » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • NUnit против xUnit
    Гость » » в форуме C#
    0 Ответы
    30 Просмотры
    Последнее сообщение Гость
  • Отложенная запись WriteableBitmap в фоновом потоке вызывает мерцание
    Anonymous » » в форуме C#
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»