Connect with us

Entwicklung & Code

Google will Android durch Optimierungen am Kernel schneller machen


Google führt einen neuen Optimierungstrick ein, um den Linux-Kernel von Android schneller laufen zu lassen. Dazu analysiert das System, wie Smartphone und Apps im Alltag genutzt werden und organisiert dann den Code von Android neu. Damit sollen die am häufigsten verwendeten Komponenten effizienter laufen. Dafür wird das Android LLVM-Toolchain-Team (LLVM stand ehemals für Low Level Virtual Machine) die automatische feedback-gesteuerte Optimierung (AutoFDO) in den Kernel integrieren.

Weiterlesen nach der Anzeige

Das LLVM-Toolchain-Team erklärt in einem Blogbeitrag im Android-Developers-Blog, dass der LLVM-Compiler bei einer Standard-Softwareerstellung Tausende kleiner Entscheidungen treffe, „beispielsweise ob eine Funktion inline ausgeführt werden soll und welcher Zweig einer Bedingung wahrscheinlich genommen wird, basierend auf statischen Codehinweisen“. Diese Heuristiken seien zwar nützlich, so die Entwickler, „sie sagen jedoch nicht immer die Codeausführung während der tatsächlichen Nutzung des Telefons genau voraus“.

AutoFDO verwende dafür hingegen reale Ausführungsmuster, um den Compiler zu steuern. Laut Google stellen die Muster „die häufigsten Befehlsausführungspfade dar, die der Code während der tatsächlichen Nutzung nimmt, und werden durch Aufzeichnung der Verzweigungshistorie der CPU erfasst“. Weiter heißt es, dass diese Daten zwar von Flottengeräten gesammelt werden können, Google synthetisiere diese bei der Entwicklung für den Kernel in einer Laborumgebung unter Verwendung repräsentativer Workloads, wie etwa der Ausführung der 100 beliebtesten Apps.

Dabei verwende das LLVM-Toolchain-Team einen Sampling-Profiler, um diese Daten zu erfassen und zu identifizieren, welche Teile des Codes häufig und welche weniger oft genutzt werden. „Wenn wir den Kernel mit diesen Profilen neu erstellen, kann der Compiler viel intelligentere Optimierungsentscheidungen treffen, die auf die tatsächlichen Android-Workloads zugeschnitten sind“, so Google.

Weiterlesen nach der Anzeige

Google verfolge bei der Technik eine „standardmäßig konservative“ Strategie, womit der Hersteller sicherstellen möchte, dass AutoFDO die Geschwindigkeit verbessere, ohne dabei Kompromisse in anderen Bereichen wie der Zuverlässigkeit einzugehen.

Die Vorteile des Verfahrens sind laut Google klar messbar: Interne Tests auf Pixel-Geräten zeigten eine Reduktion der Bootzeit des Betriebssystems um ein Prozent und eine Verbesserung beim Kaltstart von Apps um rund vier Prozent. Diese Änderungen führen in der Praxis zu einer „flüssigeren Benutzeroberfläche, schnellerem App-Wechsel, längerer Akkulaufzeit und insgesamt zu einem reaktionsschnelleren Gerät für den Endbenutzer“, führt Google aus.


Grafik: Was AutoFDO optimieren soll

Grafik: Was AutoFDO optimieren soll

AutoFDO soll das Android-System beschleunigen.

(Bild: Google)

Der Android-Kernel ist einer der wichtigsten Bestandteile von Googles mobilem Betriebssystem. Er bildet gewissermaßen das Herzstück von Android und steuert die Kommunikation zwischen CPU, Apps und der Hardware. Google zufolge macht der Kernel etwa 40 Prozent der CPU-Rechenzeit auf Android-Geräten aus. Entsprechend können schon kleinere Optimierungen einen Einfluss auf die Leistung eines Smartphones haben.

AutoFDO wird derzeit über das Generic-Kernel-Image in den Kernel-Zweigen android16-6.12 (Linux-Kernel 6.12 für Android 16) und android15-6.6 bereitgestellt. Die Unterstützung soll auch auf neuere GKI-Versionen ausgeweitet werden, wie beispielsweise die kommende Version android17-6.18. Google ist außerdem daran interessiert, AutoFDO auf Herstellermodule auszuweiten, die mit dem Driver Development Kit (DDK) erstellt wurden. Das „Generic Kernel Image“ wurde mit Android 11 eingeführt und soll die Kernel-Fragmentierung beheben.

Lesen Sie auch


(afl)



Source link

Entwicklung & Code

Neu in .NET 10.0 [26]: Weitere Überladungen in der Klasse OrderedDictionary


Die erst in .NET 9.0 eingeführte generische Klasse System.Collections.Generic.OrderedDictionary bot bisher schon eine Methode TryAdd(), die versucht, ein Element hinzuzufügen. Neben der bestehenden Variante TryAdd(TKey key, TValue value) gibt es nun in .NET 10.0 auch die Methode mit drei Parametern TryAdd(TKey key, TValue value, out int index). Diese neue Überladung liefert im dritten Parameter den Index zurück, falls es das Element in der Menge schon gibt.

Weiterlesen nach der Anzeige


Der Dotnet-Doktor – Holger Schwichtenberg

Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

Analog dazu gibt es für die Methode TryGetValue() nun ebenfalls eine neue Überladung, die nicht nur den Wert eines Eintrags liefert, sondern auch die Position des gefundenen Elements per Index.


.NET 11

.NET 11

(Bild: King / stock.adobe.com)

Das ist neu in .NET 11.0: Dr. Holger Schwichtenberg und weitere Experten präsentieren am 17. November 2026 auf der Online-Konferenz betterCode() .NET 11.0 die Änderungen für Entwicklerinnen und Entwickler in .NET SDK, C# 15.0 und mehr. Bis zur Veröffentlichung des Programms sind vergünstigte Blind-Bird-Tickets verfügbar.

Folgender Beispielcode nutzt TryAdd(TKey key, TValue value, out int index) in der Klasse OrderedDictionary:


public void Run()
{
 CUI.Demo("OrderedDictionary: TryAdd() mit Index and TryGetValue()");

 OrderedDictionary websites = new();
 websites.Add("Heise", "www.Heise.de");
 websites.Add("Software & Support", "www.entwickler.de");
 websites.Add("IT-Visions", "www.IT-Visions.de");
 websites.Add("Microsoft", "www.Microsoft.com");

 var key = "IT-Visions";
 var value = "www.IT-Visions.de";

 foreach (var item in websites)
 {
  CUI.OL(item.Key + " -> " + item.Value);
 }

 CUI.BR();

 // --- ALT: TryGetValue() mit 2 Parametern
 if (websites.TryGetValue(key, out string? value1))
 {
  int index3 = websites.IndexOf(key); // Nochmals nachschauen nach der Position
  CUI.Success($"Element {value1} wurde gefunden an der Position {index3}.");
 }

 // --- NEUE Überladung bei TryGetValue() mit Parameter index
 if (websites.TryGetValue(key, out string? value4, out int index4))
 {
  CUI.Success($"Element {value1} wurde gefunden an der Position {index4}.");
 }

 // --- ALT: TryAdd() mit 2 Parametern
 if (!websites.TryAdd(key, value))
 {
  int index1 = websites.IndexOf(key); // Nochmals nachschauen nach der Position
  CUI.Warning($"Element {value} ist bereits vorhanden an der Position {index1}!");
 }
 else
 {
  CUI.Success($"Element {value} wurde hinzugefügt.");
 }

 // --- NEUE Überladung von TryAdd() liefert jetzt auch den Index (Position) zurück
 if (!websites.TryAdd(key, value, out int index2))
 {
  CUI.Warning($"Element {value} ist bereits vorhanden an der Position {index2}!");
 }
 else
 {
  CUI.Success($"Element {value} wurde hinzugefügt.");
 }
}



Screenshot

Screenshot

Ausgabe des Beispielcodes (Abb. 1)


(rme)



Source link

Weiterlesen

Entwicklung & Code

.NET 11.0 Preview 5 vereinfacht das statische serverseitige Rendering in Blazor


Die fünfte Vorschauversion der kommenden .NET-Version 11.0 ist gestern Abend erschienen. Parallel dazu gab es auch die Version 11904.113 der für .NET 11.0 notwendigen Insiders-Variante von Visual Studio 2026. Alternativ ist eine Arbeit mit Visual Studio Code und dem im SDK mitgelieferten Kommandozeilencompiler möglich.

Weiterlesen nach der Anzeige


Dr. Holger Schwichtenberg

Dr. Holger Schwichtenberg

Dr. Holger Schwichtenberg hat Fachbücher zu .NET 10.0, C# 14.0, Blazor 10.0 und Entity Framework Core 10.0 veröffentlicht. Er arbeitet als Berater und Trainer bei www.IT-Visions.de.


betterCode() .NET 11.0

betterCode() .NET 11.0

(Bild: King / stock.adobe.com)

Das ist neu in .NET 11.0: Dr. Holger Schwichtenberg und weitere Experten präsentieren am 17. November 2026 auf der Online-Konferenz betterCode() .NET 11.0 die Änderungen für Entwicklerinnen und Entwickler in .NET SDK, C# 15.0 und mehr. Bis zur Veröffentlichung des Programms sind vergünstigte Blind-Bird-Tickets verfügbar.

Bei dem in .NET 8.0 eingeführten statischen serverseitigen Rendering (Blazor Static SSR), das als eine Ablösung für ASP.NET Core MVC und ASP.NET Core Razor Pages verstanden werden kann, funktioniert das Tabellensteuerelement QuickGrid, das Microsoft im NuGet-Paket Microsoft.AspNetCore.Components.QuickGrid liefert, bisher nur eingeschränkt. Lediglich bei den interaktiven Varianten Blazor Server und Blazor WebAssembly sowie Blazor Hybrid stehen alle Funktionen des QuickGrid-Steuerelements zur Verfügung.

Seit Blazor 11.0 Preview 5 ist es möglich, dass das QuickGrid-Steuerelement auch in statisch serverseitig gerenderten Blazor-Seiten sortieren und blättern kann. Wenn das Grid nicht interaktiv ist, werden die sortierbaren Spaltenüberschriften und die Seitennavigation als erweiterte HTML-Formulare gerendert, die ihren Zustand über URL-Abfrageparameter (Query String) übertragen. Lädt eine Nutzerin oder ein Nutzer die Seite neu oder kopiert die URL und öffnet sie erneut, bleiben Sortierung und aktuelle Seite erhalten. Dadurch lassen sich diese Zustände einfach per URL teilen oder als Lesezeichen speichern.

Lesen Sie auch

Im Schnelltest zeigte sich: In Zusammenarbeit mit Entity Framework Core als Datenquelle mit Paging in der Datenbank erzeugt das Blättern einen Laufzeitfehler: „InvalidOperationException: A second operation was started on this context instance before a previous operation completed. This is usually caused by different threads concurrently using the same instance of DbContext.“

Weiterlesen nach der Anzeige

Das folgende Beispiel funktioniert aktuell nur korrekt, wenn es immer alle Datensätze lädt und das Paging im RAM ausführt via

private List flightSet => context.Flights.ToList();


@page "/QuickGridSSR"
@using Microsoft.AspNetCore.Components.QuickGrid
@using Microsoft.EntityFrameworkCore
@inject IDbContextFactory DbFactory
@implements IAsyncDisposable
 
QuickGrid SSR
 

 

  p.FlightNo)" Title="FlugNr" Sortable="true" />
  p.Departure)" Title="Abflugort" Sortable="true">
 
  p.Destination)" Title="Zielort" Sortable="true">
  
  p.FlightDate)" Title="Datum" Format="dd.MM.yyyy" Sortable="true" />
  p.FreeSeats)" Title="Freie Plätze" />

 

 
@code {
 private readonly PaginationState pagination = new() { ItemsPerPage = 15 };
 
 private DA.WWWings.WwwingsV1EnContext context;
 private IQueryable flightSet => context.Flights;
  
 protected override void OnInitialized()
 {
  context = DbFactory.CreateDbContext();
 }
 
 // IAsyncDisposable implementieren, um den DbContext korrekt zu verwerfen, wenn die Komponente nicht mehr benötigt wird
 public async ValueTask DisposeAsync()
 {
  if (context != null)
  {
   await context.DisposeAsync();
  }
 }
}


Listing: QuickGrid mit Blazor Static SSR mit Zugriff auf eine Datenbank via Entity Framework Core


Das vorherige Listing zur Laufzeit (Seite 1)

Das vorherige Listing zur Laufzeit (Seite 1)

Das vorherige Listing zur Laufzeit (Seite 1)

Blazor Static SSR unterstützt seit der Einführung in .NET 8.0 die in ASP.NET Core verfügbaren serverseitigen Sessions (Cookie .AspNetCore.Session mit Session-ID, Speicherung der Daten im RAM oder einem persistenten Speicher) zur Datenübergabe zwischen Seiten. Bisher mussten Entwicklerinnen und Entwickler dafür das Session-Objekt im HttpContext-Objekt verwenden und komplexe Objekte selbst per JSON serialisieren:


@inject IHttpContextAccessor HttpContextAccessor
…
var HttpContext = HttpContextAccessor.HttpContext;
var json = System.Text.Json.JsonSerializer.Serialize(regForm);
HttpContext.Session.SetString("Formulardaten", json);


beziehungsweise


BO.RegistrationData daten = 
    System.Text.Json.JsonSerializer.Deserialize(
        HttpContext.Session.GetString("Formulardaten") ?? string.Empty);


In .NET 11.0 Preview 5 hat Microsoft nun die Annotation [SupplyParameterFromSession] eingeführt, die die Handhabung von Session-Variablen genauso einfach macht wie von Query-String-Parametern [SupplyParameterFromQuery], Form-Daten [SupplyParameterFromForm] und TempData-Werten [SupplyParameterFromTempData], wobei letztere Annotation erst in .NET 11.0 Preview 4 eingeführt wurde.

Entwicklerinnen und Entwickler annotieren in einer Seite eine oder mehrere Properties mit der Annotation [SupplyParameterFromSession]. Dabei sind einfache und komplexe Datentypen möglich, während [SupplyParameterFromTempData] auch in Preview 5 weiterhin nur mit einfachen Datentypen funktioniert:


[SupplyParameterFromSession]
public string Message { get; set; }
[SupplyParameterFromSession] 
public BO.RegistrationData RegData { get; set; }


Session-Werte werden dabei automatisch mit System.Text.Json in JSON serialisiert.

Analoge Properties deklarieren Entwicklerinnen und Entwickler in den Folgeseiten und können dann auf die Werte ohne weiteres Zutun zugreifen. Voraussetzung ist wie bisher, dass in der Startseite die Sessions aktiviert wurden:


builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();
…
app.UseSession();




Source link

Weiterlesen

Entwicklung & Code

OpenProject 17.5 führt projektbezogene IDs ein


Mit OpenProject 17.5 können Anwender erstmals zwischen zwei Arten von Kennungen für ihre Arbeitspakete wählen: einer fortlaufenden Nummerierung über die gesamte Installation oder projektbezogenen Kennungen. Vor allem große Organisationen und Teams, die von Atlassian Jira umsteigen, sollen davon profitieren. Daneben erweitert die Version die Möglichkeiten zur Anpassung agiler Backlogs und bringt kleinere Verbesserungen für Dokumentation und Besprechungsplanung.

Weiterlesen nach der Anzeige

OpenProject ist eine quelloffene Anwendung für Projektmanagement und Zusammenarbeit. Die Software unterstützt klassische und agile Projektmethoden und bietet unter anderem Aufgaben- und Ressourcenverwaltung, Gantt-Diagramme, Scrum-Backlogs sowie Funktionen für Dokumentation und Team-Arbeit. Sie läuft wahlweise als Cloud-Dienst oder im Eigenbetrieb.

Die wichtigste Neuerung von OpenProject 17.5 sind projektspezifische Arbeitspaket-Kennungen, die zunächst als Beta vorliegen. Bislang vergab OpenProject die IDs ausschließlich über eine globale Nummernfolge für die gesamte Installation. Ein Arbeitspaket erhielt etwa die Kennung „#2385“ – unabhängig davon, zu welchem Projekt es gehörte.

Künftig können Administratoren stattdessen projektbezogene Kennungen aktivieren. Diese ergänzen die ID um ein Projektkürzel und orientieren sich damit an einem Schema, das viele Anwender bereits von Jira kennen. Aus einer generischen Nummer wird so eine Kennung wie „ERP-2385“ oder „APP-4711“. Zu welchem Projekt ein Arbeitspaket gehört, lässt sich auf diese Weise sofort erkennen – das erleichtert die Orientierung in Umgebungen mit vielen Projekten.

Nach Angaben des Herstellers funktionieren bestehende numerische IDs und Verweise auch nach einer Umstellung weiter. Alte Links, Lesezeichen und Referenzen sollen weiterhin auf die jeweiligen Arbeitspakete zeigen. Die Wahl zwischen numerischen und projektspezifischen Kennungen gilt allerdings für die gesamte Installation und damit für alle Projekte.

Ein wesentlicher Grund für die neuen Kennungen sind Migrationen von Jira. Unternehmen können ihre bisherigen Jira-Issue-Keys beibehalten, wenn sie ihre Projekte nach OpenProject übertragen. So lassen sich etablierte Namenskonventionen und Referenzen in Dokumentationen, Integrationen oder Automatisierungen weiternutzen. Der Jira-Migrator übernimmt jetzt zusätzlich Fälligkeitstermine sowie geschätzte und verbleibende Arbeitsstunden.

Weiterlesen nach der Anzeige

Auch die agilen Planungsfunktionen hat OpenProject ausgebaut. Administratoren können nun einzelne Arbeitspakettypen gezielt aus Backlogs ausschließen. So sehen Teams bei der Sprint-Planung nur die Aufgaben, die für sie tatsächlich relevant sind.

Zudem hat OpenProject die Sprint- und Kartenansichten überarbeitet. Informationen wie übergeordnete Arbeitspakete, Prioritäten, Story Points, Zuständigkeiten und der Sprint-Status lassen sich dadurch schneller erfassen.

Weitere Änderungen betreffen die Dokumentation und Besprechungsplanung. Verweise auf Arbeitspakete lassen sich nun direkt in den Fließtext einbetten. In Eingabefeldern auf Basis des CKEditor reichert OpenProject solche Verweise schon während der Eingabe mit Zusatzinformationen an.

Wiederkehrende Besprechungen unterstützen außerdem neue monatliche Muster wie den ersten Montag oder den letzten Freitag eines Monats. Ändert sich ein Termin, fasst das System mehrere Änderungen in einer Benachrichtigung zusammen und reduziert so die Zahl der E-Mails.

Die Cloud-Anwendungen von OpenProject erhalten das Update seit dem 10. Juni 2026 automatisch; für selbst betriebene Instanzen stehen Anleitungen für Paket- und Docker-Installationen bereit. Alle Details listet OpenProject in den Release Notes zu Version 17.5 auf.

Lesen Sie auch

Siehe auch:


(fo)



Source link

Weiterlesen

Beliebt