我設計一個Windows Phone應用程序。
該應用程序將從互聯網上下載一些數據(JSON流)。這樣的流可能在尺寸上大得多並且數量也是多個(大約30-40)。
我希望應用程序有非常高的性能,並實現某種緩存機制,例如流。
保存這些數據的最佳方法是什麼?在Multiple Variables
或Use File Storage
。的最佳方式和內存
的最佳方式和內存
回答
我不知道這是最好的方式,但我做的是:
- 從網上下載的數據的第一時間(JSON流)
- 對每個高速緩存持續時間項目,取決於它直接在
IsolatedStorage
類型 - 商店,有文件的大小,也可以有效地存儲在那裏的文件的數量沒有限制,只要記住不要走極端。
- 我並不需要快速查詢局部數據中的數據,而是使用的數據完全是這樣的這個作品出來,我不是使用數據庫好得多。
這裏是我的設置:
後端是一個應用程序的WebAPI返回的數據傳輸對象的可枚舉。
電話應用共享相同的數據傳輸對象,並且具有一個存儲庫類 - 其公開以下方法。
我有一個SimpleRepository
抽象類,公開以下抽象方法:基於這些
Fetch(string query); //fetch the data from the data source
Store(); // Store the data somewhere
,它實現了你First(string query)
Fetch()
和First()
。
然後,我有一個加載本地數據(如果可用),並從網站如果它不是一個CachingRepository
類,它假定JSON。
它有一個構造函數,看起來像:
CachingRepository(string name, CacheDuration duration,string id)
回購的名稱是相同的後端資源,因此,例如一個名爲「貓」庫對一個corrosponding /api/phone/Cats
REST的資源後端。 id
將區別於同一資源的其他存儲庫。 CacheDuration
是我擁有的常見緩存持續時間的枚舉,但TimeSpan也可能有效。
存儲庫有兩個泛型參數 - T
它實現了一個ViewModel<U>
類(實現INotifyPropertyChanged
和使用DTO作爲模型 - 儘管這可能是您的使用過於簡單),並U
該implemnets TipRanksDTO。
取看起來像:
public async Task<IEnumerable<T>> Fetch(string queryString)
{
var localResult = await fetchFromLocal(queryString);
if(localResult != null){
return localResult;
}
return await fetchFromServer();
}
fetchFromLocal
是驗證該文件的緩存持續時間之前沒有被修改後獲取從應用程序的IsolatedStorage
數據私人異步方法。如果無法在本地獲取,則會嘗試使用HttpClient
從網上獲取。兩者都使用Newtonsoft.JSON將文件/ Web響應直接轉換爲C#對象(我以前的DTO)。
現在,Store同樣簡單 - 只需打開IsolatedStorage
並將DTO的序列化版本推送到數據庫,即可接受ViewModels。
每個ViewModel都有一個指向DTO的Model
屬性。如果使用DTO和模型對於您來說不夠用,或者您想稍後將任何內容保存到服務器,則可能希望在DTO和模型之間有一個額外的步驟。
然後,使用是一樣的東西:
OnPageLoaded += (sender,args) => {
var repo = new CachingRepository("Cats",CachingDuration.Daily);
var cats = await repo.Fetch();
pageViewModel.cats.Replace(cats); //update the ObservableCollection on the VM.
repo.Store(cats);
}
- 1. 「mangle」(代表)內存的最佳方式
- 2. 在x86和ARM中移動內存的最佳方式?
- 3. 效率內存和CPU使用率的最佳方式
- 4. 的最佳方式和MySQL
- 5. 將密碼保存到黑莓內存的最佳方式
- 6. 保存圖像在內存中的最佳方式
- 7. 將圖存儲到內存中的最佳方式
- 8. 以QML格式存儲列表內容的最佳方式
- 9. 在內存中格式化SyntaxTree的最佳方式是什麼?
- 10. 最佳方式
- 11. 最佳方式
- 12. 最佳方式
- 13. 最佳方式
- 14. 最佳方式
- 15. 最佳方式
- 16. 最佳方式
- 17. 最佳方式
- 18. 最佳方式
- 19. 最佳方式
- 20. 最佳方式
- 21. 最佳方式
- 22. 最佳方式
- 23. 最佳方式
- 24. 最佳方式
- 25. 最佳方式
- 26. 最佳方式
- 27. 最佳方式
- 28. 最佳方式
- 29. 最佳方式
- 30. 最佳方式
謝謝回答!答案爲我提供了完成任務的方法。 –
下個月我會來芬蘭,我會問那裏的技術人員,如果他們有Ny改進建議,請更新。祝你好運。 –
謝謝!會等待一些好的迴應:) –