UWP: недостаточно памяти при сборке релиза - PullRequest
1 голос
/ 24 октября 2019

Приложение UWP с RichEditBox имеет проблемы с памятью и другие типы при конфигурации выпуска с включенной оптимизацией кода. При отладке или пересылке с неоптимизированным кодом он работает нормально. Следующий код находится внутри метода, работающего в пуле потоков (await Task.Run (() => MyMethod (richEditTextDocument));

    // Getting text for first time works
    richEditTextDocument.GetText(Windows.UI.Text.TextGetOptions.None, out string rtbOriginalText);

    foreach (Match v in wordMatches)
    {
        try
        {
                // In release mode with optimized code, 
//at very first iteration, line below throws 
//"Insufficient memory to continue execution of the program"                        
                Windows.UI.Text.ITextRange selectedTextNew = richEditTextDocument.GetRange(v.Index, v.Index + v.Length);

        }
        catch
        {
            continue; //insufficient memory
        }

    }


    // In release with optimized code, calling GetText for second time throws
    //(Exception from HRESULT: 0x8000FFFF)
    //   at System.Runtime.InteropServices.McgMarshal.ThrowOnExternalCallFailed(Int32, RuntimeTypeHandle) + 0x21
    //   at __Interop.ComCallHelpers.Call(__ComObject, RuntimeTypeHandle, Int32, TextGetOptions, Void *) + 0xc2
    //   at __Interop.ForwardComStubs.Stub_67[TThis](__ComObject, TextGetOptions, String &, Int32) + 0x44
    //   at Windows.UI.Text.RichEditTextDocument.GetText(TextGetOptions, String &) + 0x23

    // Thinking that it can be fixed setting selection to 0 before GetText, but...
    richEditTextDocument.Selection.StartPosition = 0; //, this line throws insufficient memory
    richEditTextDocument.Selection.EndPosition = 0;

    // HRESULT: 0x8000FFFF (if execution reachs here, deleting two previous lines)
    richEditTextDocument.GetText(Windows.UI.Text.TextGetOptions.None, out string rtbOriginalTextAnother);

Отправка в хранилище была отклонена два раза из-за других незначительных ошибок, которые пошлиисправлено, но в третий раз он прошел тест и был опубликован, не замечая этой ошибки, которая является частью основной функции приложения и позволяет его «не использовать» (как они (Microsoft) говорили в другой раз). Оптимизированное построение кода (но с собственным набором инструментов NET) жалуется на отсутствие DLL-библиотек DEBUG. Я заметил ошибку, но, поскольку отключение оптимизации кода при отладке выпуска «исправило» его (как объяснено в https://devblogs.microsoft.com/devops/debugging-net-native-windows-universal-apps/, ссылается на официальные документы Microsoftна https://docs.microsoft.com/en-us/windows/msix/package/packaging-uwp-apps), я забыл, что это только «игнорируется». Итак, впервые публикуя и получил непригодное для использования приложение.

Приложение использует пакеты nuget NewtonSoft.Json, Win2D.uwp, Microsoft.NETCore.UniversalWindowsPlatform и «нормальная» ссылка на Microsoft.Advertising.Xaml (также приложение не показывает рекламу вИз-за ошибки, ErrorOcurn дает NoAdAvailable)

Спасибо

...