.NET Maui IOS Debug 和 Release 模式区别

问题描述 投票:0回答:2

我有一个奇怪的问题。我创建了一个 .NET MAUI 应用程序。在我的应用程序中,我正在加载一些我之前加载到字节数组中的基本旧 .NET 程序集,例如;

byte[] asmbinary=loadassemblybinary();
Assembly MyAssembly = Assembly.Load(asmbinary);

完美运行

  • WinUI(调试发布模式),

  • Android(调试发布模式),

  • MacCatalyst(调试发布模式),

  • iOS(调试模式)

但在 iOS 发布模式下,应用程序在 Assembly.Load 崩溃,无一例外(即使我无法通过尝试捕捉到它)。

实际上我不需要发布模式,但我的应用程序中有一些 CollectionViews。 CollectionView 滚动性能在调试模式下确实很差,但在所有平台的发布模式下都能流畅运行。 (我不明白为什么 ui 在调试模式下性能如此低,或者如何修复它。解决这个问题的方法也很好)

现在我需要在调试模式下加速 ui 性能,或者在 iOS 发布模式下修复 Assembly.Load

对我的情况有什么想法吗?

提前致谢。

安德

.net-assembly maui release-mode maui-ios
2个回答
0
投票

CollectionView 滚动性能在调试模式下确实很差,但在所有平台的发布模式下都能流畅运行

tl;dr 在没有附加调试器的情况下进行测试。要么在没有调试器的情况下运行,要么在下载后,滑动 kill,然后从设备(或模拟器)的主屏幕再次运行。

从技术上讲,大多数速度下降是由于 附加调试器。 (不要在发布与调试中运行。)

存在调试器时,禁用 JIT 优化。
原因:以便在遇到断点或抛出异常时,visual studio 可以准确地停在正确的行上。


调试模式减速可能会揭示一个你真的应该解决的问题,以便在低端设备上获得流畅的性能。

如果你想调查这种可能性, 请创建一个新问题,解释情况(调试速度变慢),并包括你的列表视图的项目模板的 xaml。


也可能不是 UI 本身,而是 显示项目时运行的代码。 listview ItemTemplate 中的每个项目是否包含图像?或者其他任何可能需要大量处理才能获取或显示的内容?


0
投票

我不明白为什么 ui 在调试模式下的性能如此之低, 或如何修复它。一个解决方法也很好

Q&A上也有类似的问题,可以在MauiProgram中添加如下代码尝试解决:

using Microsoft.Maui.Platform;// namespace

#if IOS   // add handler in MauiProgram.cs   
Microsoft.Maui.Handlers.ScrollViewHandler.Mapper.AppendToMapping("custom", (handler,view) =>        {           
 handler.PlatformView.UpdateContentSize(handler.VirtualView.ContentSize);            
 handler.PlatformArrange(handler.PlatformView.Frame.ToRectangle());       
 });
#endif

更多可以参考问答问题:MAUI - CollectionView and scrolling - not working with IOS emulators

© www.soinside.com 2019 - 2024. All rights reserved.