결론: 못 만들었는데, 딴것들이 더 못 만들었어서 선택하길 참 잘 했다.
네이티브 친화적인 서비스 및 구현을 위해서라면 최강의 크로스 플랫폼
자마린에서 베타테스트 다 된줄 알았는데, 큰 뼈대을 바꿔서인지 잔버그 좀 있음. 사소한 것들이라 별 문제가 되진 않음.
컨트롤 아키텍처도 좀 바꾸지… 군데군데 좀 구림. Label에 TextType 속성은 정말 이해가 안됨.
Shell은 구림. 잘 사용하려면 커스터마이징 추천. 저희도 그렇게 했습니다. (Shell의 uri기반 라우팅이 좋아서 쓰긴 해야함)
xamarin의 레거시들 좀 다 갈아치우고 온줄 알았는데 레거시들도 그대로 가져와서 약간 좀…; (예: TableView)
사용자 행동분석 할 때, 핸들러에서 글로벌로 처리했는데 상당히 괜찮음.
누가 TemplatedView 기반으로 UI 컨트롤들 싹 다 재 정리 해줬으면 좋겠다고 바라게 됨
‘역시 서비스는 네이티브가 업데이트 해주는거 다 쓰면서 해야 최고지!’ 라면 MAUI
모바일에서 C#이라는 사기 언어를 사용하게 해주셔서 감사합니다.
13개의 좋아요
우노도 고려하셨었나요? 모바일 하기에 마우이가 그래도 좀 나은가요?
4개의 좋아요
우노도 고려하긴 했는데 몇가지 이유 때문에 포기했습니다.
오피셜이 아니다.
샘플이링 토이프로젝트 해보니 ui가 네이티브에 비해 떨어진다. (제스처나 애니메이션 등)
우노는 정말 채용 못 할 것 같다.
winUI를 중심으로 두고 나머지 플랫폼을 통합하는데, 이 컨셉은 windows 친화적으로 성장할 가능성이 있다고 판단. (그런데 저희는 Windows를 할 일이 없어서 오히려 단점으로 보였습니다. WASM도 필요없고)
이것과 함께 몇가지 이유때문에 MAUI를 선택했습니다.
7개의 좋아요
Ivory
1월 28, 2023, 12:45오후
4
MAUI의 랜더링 성능은 Xamarin.Forms에 어떠셨나요?
Xamarin.Forms는 말만 XAML이지 WPF만큼 자유롭게 UI를 구성하기도 쉽지 않고 복잡한 UI 구현을 위해 Viausl Tree가 무거워지는 경우 랜더링 성능이 처참해서 보통의 LOB앱(DB의 데이터를 표시하고 업데이트하고 하는 등의 앱)이 아닌 유틸리티나 미디어 관련 앱을 만들기에는 기능과 성능 모두 충분하지 않아서 고생좀 했었네요.
MAUI 관련 내용만 봐서는 MAUI도 기본적으로는 Xamarin.Forms처럼 각 플랫폼용 Renderer를 사용하는 것 같던데 Xamarin.Forms보다는 개선된 것처럼 설명되어 있지만 실제로 얼마나 차이가 날 지 모르겠네요.
UNO같은 MS 기본 플랫폼이 아닌 기술들은 서드파티 지원이 약한 것이 가장 큰 단점입니다. 그래서 단순 설명만 보면 UNO가 정말 좋아보일 수 있지만 실제 개발에 들어가면 각종 문제에 계속 걸릴 가능성이 있어서 저도 UNO는 아직까지는 도입할 생각이 없네요.
6개의 좋아요
말씀하신 내용에서 그래픽 렌더링 자체는 구리지 않다고 생각해요. 어짜피 네이티브를 그대로 쓰는거니까요.
렌더링의 문제라기보다 iOS, Android라는 각각 다른 UI 아키텍처를 통합하는데 어려움이 있어서 네이티브로써의 최적화를 못한 느낌? 사실 그게 어려운거기도 하구요. UI 아키텍처를 WPF와 비교하시면 역시 구립니다. 그 사악한 template 기반 UI를 제대로 지원하지 못해요. 아마 각 네이티브를 가지고 WPF 그대로를 표현하기에는 어려움이 많을거에요. 그래도 성능은 핸들러라는 놈을 통해 좀 나아졌고, 일반적인 소셜 모바일 앱 수준은 문제가 되지 않습니다.
그리고 단순 그래픽 렌더링은 ’Microsoft.Maui.Graphics’ 라는 크로스플랫폼 그래픽 엔진이 생겨서 그걸로 옛날 윈폼에서 드로윙 가지고 그리는거 마냥하면 일반적 차트도 문제 없다고 생각하고 있어요!
즉, 기본적으로 지원하는 UI 컨트롤들은 일반적인 소셜에서는 문제 없는 수준. (문제가 된다면 아마 개발자가 잘 못 다루었을 가능성이 큼)
그 외 차트 같은 수준의 고성능이 필요한 것들은 위에서 말한 그래픽 엔진을 가지고 직접 그려야하는데, 샘플들 을 보면 렌더링 성능 자체는 크게 문제 없다고 생각해요~
5개의 좋아요
저는 토이 프로젝트로 만지작하며 앱을 하나 만들어보았는데
좀 치명적이다 싶은 버그들 때문에 갈 길이 아직도 멀구나 하고 느꼈습니다.
굵직한거 2개만 뽑아보자면
앱 아이콘을 다른 이미지로 하기위해 config에서 새로 정의하면 오류 발생됨(반드시 기존 appicon.svg 파일을 교체하거나 이것만 써야합니다)
webclient로 통신하면 오류없이 결과를 받아오는 사이트가있지만 그러지 못하는 사이트나 api가 많다(예:okky.kr은 잘 스크래핑 되지만 이상하게 위시캣은 안된다 chatgpt API도 통신하는 도중 뻗음)
5개의 좋아요
저는 커스터마이징이 가능한 카메라뷰가 필요했는데 없어서
계속 기다리는 중입니다.
마우이 커뮤니티 툴킷 팀에서 개발중인데
기다린지 2달째 인데 아직도 무소식이네요.
저도 토이프로젝트로 애견 쇼핑몰 만들어 봤는데
저도 Shell에서 욕나오더라구요…근데 Shell이 커스터마이징이 되는지는 몰랐네요.
아무튼 멀티플랫폼의 한계(device 네이티브API)만 빼면 .net Maui로 못만드는게 없다는게 제 결론이었습니다.
5개의 좋아요
ShellContent을 상속받아 몇가지 기능을 만들어서 쓰고 있어요.
라우팅 및 페이지 캐싱 전략 같은 것들
5개의 좋아요
마우이 프리뷰 버전부터 개발 했는대 다른 버그들은 이래저래 회피해서 하긴 했는대 메모리 누수는 힘드네요…
PopAsync() 이전, 이후 별짓을 다해 놨습니다.
Pop된 페이지가 제대로 메모리 해제가 안되는거 같습니다.
opened 09:43PM - 12 Dec 22 UTC
closed 02:11PM - 17 Feb 23 UTC
t/bug
platform/windows 🪟
p/0
area/perf 🏎️
partner/cat 😻
delighter
fixed-in-8.0.0-preview.1.7762
### Description
I'm trying to develop LoB app in MAUI, including lot's of Colle… ctionViews and complex master-details with multiple views, data forms and custom controls. It's bumpy road, but by far the most critical issue for me is the amount of memory leaks, which makes the app completely unusable.
![742nlk](https://user-images.githubusercontent.com/26696962/207142298-628de0b8-809c-4b59-aa2d-a610589101d5.jpg)
I have already reported 2 issues resulting in severe memory leak and there have been many more raised over time by others. Unfortunately they aren't getting attention they deserve in my opinion.
The more I look into this topic, the more puzzled I'm by memory management in MAUI and the more I'm determined that there is something horribly wrong happening inside MAUI. I decided to create another sample to demonstrate this issue and it's significance for production apps. The sample is very simple MVVM app with CollectionView of Items. Clicking on an item will bring you to a detail page.
This bit in DetailPage constructor was added to increase memory allocation of the detail to make the memory leak more obvious (Array.Clear(Bytes) causes array to be iterated and allocated):
```
Bytes = new byte[1024 * 400000];
Array.Clear(Bytes);
```
If you keep navigating back and forth from master to its details and watch memory usage, you will see memory raising from 100 MBs to several GBs very quickly. I added button to execute GC.Collect(), but forcing GC never disposes all the resources.
![image](https://user-images.githubusercontent.com/26696962/207156901-bb8ba9b5-6d91-4f50-a051-5e3baadda56b.png)
Calling this to manually free some resources doesn't seem to have any effect.
```
vm.Bytes = null;
vm.Item = null;
BindingContext = null;
```
I made several observations:
- Memory doesn't always go up upon opening the DetailPage.
- GC sometimes does seem to be able to dispose some resources.
- Using VS memory profiler, I don't see my objects bloating the memory.
- Using VS memory profiler, I see lot's of UI bits and handlers being stuck in the memory.
- There seem to be no single point of root holding these things.
- Seems like xaml bindings might have something to do with it.
![image](https://user-images.githubusercontent.com/26696962/207152312-63dbd8a2-7d79-4556-abe1-a43f0542581e.png)
The issue is obvious in other samples as well, for example Monkey app by @[jamesmontemagno](https://github.com/dotnet-presentations/dotnet-maui-workshop/commits?author=jamesmontemagno)
https://github.com/dotnet-presentations/dotnet-maui-workshop
Note that there is no use of static resources or event subscription anywhere in the sample code.
I observed the issue only in Windows as I have no sufficient way to check memory in other platforms.
Any tips about how to dispose DetailPage with all the related resources would be very welcomed.
### Steps to Reproduce
1. Load the repository and run the app.
2. Repeatedly open details from CollectionView by selecting them and then pop the DetailPage using the button while observing memory usage in ResMon/memory profiler.
3. Click on the "Force GC" button to trigger GC - some memory resources might be disposed, but the memory leak persists.
### Link to public reproduction project repository
https://github.com/Vroomer/MAUI-master-detail-memory-leak.git
### Version with bug
7.0 (current)
### Last version that worked well
Unknown/Other
### Affected platforms
Windows, I was *not* able test on other platforms
### Affected platform versions
Windows SDK 10.0.22000
### Did you find any workaround?
_No response_
### Relevant log output
_No response_
5개의 좋아요