我正在使用Azure Mobile App与Xamarin.Forms创建一个离线移动应用程序。
我的解决方案基于https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/chapter3/client/。
这是我用于离线同步的代码:
问题在于即使没有要拉取的内容,同步也需要很长时间(Android设备需要8-9秒,整个数据库需要超过25秒)。
我查看了Fiddler,发现移动应用后端响应每个请求大约需要50毫秒,因此问题似乎不是来自这里。
有人遇到同样的麻烦吗?我是否做错了什么或有改进同步性能的提示?
我的解决方案基于https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/chapter3/client/。
这是我用于离线同步的代码:
public class AzureDataSource
{
private async Task InitializeAsync()
{
// Short circuit - local database is already initialized
if (client.SyncContext.IsInitialized)
{
return;
}
// Define the database schema
store.DefineTable<ArrayElement>();
store.DefineTable<InputAnswer>();
//Same thing with 16 others table
...
// Actually create the store and update the schema
await client.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());
}
public async Task SyncOfflineCacheAsync()
{
await InitializeAsync();
//Check if authenticated
if (client.CurrentUser != null)
{
// Push the Operations Queue to the mobile backend
await client.SyncContext.PushAsync();
// Pull each sync table
var arrayTable = await GetTableAsync<ArrayElement>();
await arrayTable.PullAsync();
var inputAnswerInstanceTable = await GetTableAsync<InputAnswer>();
await inputAnswerInstanceTable.PullAsync();
//Same thing with 16 others table
...
}
}
public async Task<IGenericTable<T>> GetTableAsync<T>() where T : TableData
{
await InitializeAsync();
return new AzureCloudTable<T>(client);
}
}
public class AzureCloudTable<T>
{
public AzureCloudTable(MobileServiceClient client)
{
this.client = client;
this.table = client.GetSyncTable<T>();
}
public async Task PullAsync()
{
//Query name used for incremental pull
string queryName = $"incsync_{typeof(T).Name}";
await table.PullAsync(queryName, table.CreateQuery());
}
}
问题在于即使没有要拉取的内容,同步也需要很长时间(Android设备需要8-9秒,整个数据库需要超过25秒)。
我查看了Fiddler,发现移动应用后端响应每个请求大约需要50毫秒,因此问题似乎不是来自这里。
有人遇到同样的麻烦吗?我是否做错了什么或有改进同步性能的提示?