2017-11-16 2 views
0

Wir verwenden Xamarin-Formulare, um eine von Azure unterstützte mobile App zu erstellen. Wir verwenden Offline-Datensynchronisierung, um Offline-Datenspeicherung und -verarbeitung zu ermöglichen. Dies ist alles nach den vielen Walkthroughs im Web angeschlossen und alles scheint gut zu funktionieren.Viele Controller-Anrufe mit Xamarin Azure Pullasync erhalten

Eine unserer Tabellen enthält ~ 5000 Zeilen, die uns ein paar Probleme verursacht. Wenn Sie die anfängliche Synchronisierung mit der App mithilfe des Codes durchführen;

this.listTable = client.GetSyncTable<Entities.List>(); 
await this.listTable.PullAsync("allLists", listTable.CreateQuery()); 

der azure .NET-Dienst scheint seine Tausende von Mal zu bekommen. Ich habe die GetAllList() - Methode des Dienstes auf azurblau getestet - mit dem Code;

public IQueryable<List> GetAllList() 
{ 
    return Query(); 
} 

und der Breakpoint-Hit wird viel getroffen. Ich habe überprüft, was Query() zurückgibt, und es sieht so aus, als würde ich den gesamten Datensatz (~ 5000 Zeilen) zurückgeben, wie ich es erwarten würde.

Weiß jemand, was ich falsch machen könnte, um es so oft anzurufen? Es sieht so aus, als würde es das gesamte Dataset für möglicherweise jede Zeile im Dataset zurückgeben - wodurch die Synchronisierung sehr langsam wird.

Ich trat beim Debuggen durch den Controller-Prozess und es sieht nicht nur so aus, dass es die GetAllList() - Methode oft aufruft, es initialisiert den Controller und ruft dann die GetAllList-Methode immer wieder auf.

Ich bin sicher, dass ich etwas nach oben falsch eingestellt habe und es ist ein einfacher Fehler, wie ich kann nicht glauben, dies ist konstruktionsbedingt, kann aber nicht für das Leben von mir vor Ort, was habe ich falsch gemacht :(

Jede Hilfe wäre sehr willkommen!

Danke, Al.

+0

Gibt es eine geplante Konfiguration für die Synchronisierung? Haben Sie einen Git Hub Repo? – Baskar

+0

Ich habe leider kein git hub repo - es wird für unser Unternehmen vor Ort mit TFS zur Quellcodeverwaltung erstellt. Die Synchronisierung wird ausgeführt, wenn die App gestartet wird. –

+0

Ich habe eine Klasse in meiner PCL, die den MobileServiceClient, die Synchronisierungstabellen usw. enthält, und ich habe eine SyncAsync-Aufgabe darin. Ich rufe dies an, wenn die App startet, um alle meine Offline-Tabellen zu synchronisieren. Die Klasse wurde von Azure erstellt, als ich die mobile App mit der Schnellstartvorlage erstellte - sehr ähnlich wie auf dieser Webseite - https: // developer. xamarin.com/guides/xamarin-forms/cloud-services/sync/azure-mobile-apps/ –

Antwort

0

die Seitengröße für die Anforderungen stellte sich heraus, 50 standardmäßig aktiviert. Dies führt zu Belastungen von Anrufen zu dem Dienst die Anzahl der Zeilen war ich Anruf, der viel Zeit nimmt

Ich kann die MaxPageSize auf dem Client und die PageSize auf dem Dienst hochfahren und es ist wesentlich schneller.

waren hier über die Vorschläge zur Referenz - https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ff5b6ba7-76c7-42fe-847d-9898256e3249/problem-syncing-large-table?forum=azuremobile

Es gibt natürlich Dinge, die berücksichtigt werden müssen, wenn Sie diesen Wert Upping - aber zumindest erklärt es, was geschah.

Verwandte Themen