簡體   English   中英

優化智能客戶端性能

[英]Optimizing Smart Client Performance

我有一個智能客戶端(WPF),可以調用服務器VA服務(WCF)。 我正在處理的屏幕包含調用構造函數時加載的對象列表。 我可以在列表中添加,編輯和刪除記錄。

通常,我所做的是在每次添加或刪除后再次從服務中重新加載整個模型,原因很多,其中包括兩次調用之間服務器上的數據可能已更改的事實。

事實證明,這種方法對性能產生了很大的影響,因為我正在加載在“添加”和“編輯”中上下發送列表的所有內容。

還有什么其他選擇對我開放,應該只將所需的信息發送到服務器,並且每次執行添加或刪除操作時如何不重新加載所有數據?

進行描述的最佳方式(我假設您已經知道客戶端/服務器I / O已經成為瓶頸),一旦填充了客戶端,就只能雙向發送更改。

如果您采用了日志記錄模型來更新數據,這可能很簡單。 為了使任何進程都能更改共享數據,它必須創建一個帶有時間戳的事務,該事務被添加到日志中。 通過將事務應用於數據的方法進行數據更新。

數據模型支持事務日志后,您便可以采用一種簡單的方法來使客戶端和服務器保持同步,並以最小的網絡流量進行同步:要更新客戶端,服務器將發送自上次上次創建以來創建的所有日志條目。客戶端已更新。

改造成現有設計可能需要大量工作。 在走這條路之前,您需要確定要解決的問題實際上就是您所遇到的問題。

  1. 確保此功能封裝良好,以便您無需觸摸其他組件即可使用它。
  2. 讓您的源代碼受版本控制,並經常簽入。
  3. 我強烈建議您使用一套自動化的單元測試,以在重構之前驗證一切正常,並在您執行每次更改時繼續工作。
  4. 如果性能受到影響的是服務器->客戶端數據傳輸,那么除了服務器上的查詢,處理和磁盤IO之外,您還可以考慮設計給定對象集合或圖的散列,並將散列傳遞給服務服務器上的方法,該方法將查詢和計算db中的哈希值,比較哈希值,然后返回truefalse 僅當為false ,您才可以重新加載數據。 如果更改不太可能或很少發生,則此方法有效,因為更改后需要兩次調用才能獲取數據。 如果您擔心數據庫中的更改,則可能不希望僅在用戶修改或添加某些內容時獲得更改-例如,這可能是基於計時器的完全獨立的操作。 您的並發策略實際上取決於您的數據,用戶數量,一個以上的用戶有興趣同時更改同一數據的可能性等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM