Приложение 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)
Спасибо