GroundOverlay performance

This commit is contained in:
ClemensFischer 2025-09-04 08:11:15 +02:00
parent 0f048e2073
commit 9e33282d07
3 changed files with 22 additions and 17 deletions

View file

@ -22,7 +22,7 @@ namespace MapControl
public static Task<IImage> LoadImageAsync(Stream stream) public static Task<IImage> LoadImageAsync(Stream stream)
{ {
return Task.FromResult(LoadImage(stream)); return Task.Run(() => LoadImage(stream));
} }
public static async Task<IImage> LoadImageAsync(string path) public static async Task<IImage> LoadImageAsync(string path)

View file

@ -37,7 +37,21 @@ namespace MapControl
ZIndex = zIndex; ZIndex = zIndex;
} }
public async Task Load() public async Task LoadStream(ZipArchive archive)
{
var entry = archive.GetEntry(ImagePath);
if (entry != null)
{
using (var zipStream = entry.Open())
{
Stream = new MemoryStream((int)zipStream.Length);
await zipStream.CopyToAsync(Stream);
}
}
}
public async Task LoadImage()
{ {
if (Stream != null) if (Stream != null)
{ {
@ -46,7 +60,7 @@ namespace MapControl
} }
} }
public async Task Load(Uri docUri) public async Task LoadImage(Uri docUri)
{ {
ImageSource = await ImageLoader.LoadImageAsync(new Uri(docUri, ImagePath)); ImageSource = await ImageLoader.LoadImageAsync(new Uri(docUri, ImagePath));
} }
@ -141,19 +155,10 @@ namespace MapControl
foreach (var imageOverlay in imageOverlays) foreach (var imageOverlay in imageOverlays)
{ {
var imageEntry = archive.GetEntry(imageOverlay.ImagePath); await imageOverlay.LoadStream(archive);
if (imageEntry != null)
{
using (var zipStream = imageEntry.Open())
{
imageOverlay.Stream = new MemoryStream((int)zipStream.Length);
await zipStream.CopyToAsync(imageOverlay.Stream);
}
}
} }
Parallel.ForEach(imageOverlays, async imageOverlay => await imageOverlay.Load()); await Task.WhenAll(imageOverlays.Select(imageOverlay => imageOverlay.LoadImage()));
return imageOverlays; return imageOverlays;
} }
@ -172,7 +177,7 @@ namespace MapControl
var docUri = new Uri(docFilePath); var docUri = new Uri(docFilePath);
Parallel.ForEach(imageOverlays, async imageOverlay => await imageOverlay.Load(docUri)); await Task.WhenAll(imageOverlays.Select(imageOverlay => imageOverlay.LoadImage(docUri)));
return imageOverlays; return imageOverlays;
} }
@ -180,7 +185,7 @@ namespace MapControl
private static async Task<List<ImageOverlay>> ReadGroundOverlays(Stream docStream) private static async Task<List<ImageOverlay>> ReadGroundOverlays(Stream docStream)
{ {
#if NETFRAMEWORK #if NETFRAMEWORK
var document = await Task.FromResult(XDocument.Load(docStream, LoadOptions.None)); var document = await Task.Run(() => XDocument.Load(docStream, LoadOptions.None));
#else #else
var document = await XDocument.LoadAsync(docStream, LoadOptions.None, System.Threading.CancellationToken.None); var document = await XDocument.LoadAsync(docStream, LoadOptions.None, System.Threading.CancellationToken.None);
#endif #endif

View file

@ -29,7 +29,7 @@ namespace MapControl
public static Task<ImageSource> LoadImageAsync(Stream stream) public static Task<ImageSource> LoadImageAsync(Stream stream)
{ {
return Task.FromResult(LoadImage(stream)); return Task.Run(() => LoadImage(stream));
} }
public static async Task<ImageSource> LoadImageAsync(string path) public static async Task<ImageSource> LoadImageAsync(string path)