在WPF中 使用StreamGeometry提高性能。

来源:http://www.cnblogs.com/Washine/archive/2016/07/02/5635037.html
-Advertisement-
Play Games

現在正在使用WPF開發一個股票K線圖圖表,性能考慮是最大的一方面。 每根柱子寬5像素,柱子和柱子之間的間隔3像素。 一個1920*1080解析度的屏幕,勢必要繪製超過200個柱子。如果選擇的繪製方案不先進,對圖表的繪製是有很大的性能影響的。 任何圖形都由直線和曲線構成的。在WPF中,最底層的圖形的繪 ...


     現在正在使用WPF開發一個股票K線圖圖表,性能考慮是最大的一方面。 每根柱子寬5像素,柱子和柱子之間的間隔3像素。

     一個1920*1080解析度的屏幕,勢必要繪製超過200個柱子。如果選擇的繪製方案不先進,對圖表的繪製是有很大的性能影響的。

     任何圖形都由直線和曲線構成的。在WPF中,最底層的圖形的繪製級別是Geometry。

     在WPF中,使用DrawingContext的方法繪製一個直線,就內部創建了一個LineGeometry對象,繪製一個矩形,就內部創建了一個RectagleGeometry對象。

     所以使用傳統的DrawLine,DrawRectangle來繪製這些柱子是不科學的。因為 每一根柱子,包含一個矩形和一根直線。

    假設繪製200個柱子,每次要實例化200個LineGeometry對象以及200個RectangleGeometry對象。

     在拖動的時候,不停的實例化和回收Geometry對象,畫面的延遲是非常明顯的。

     那麼有沒有一種繪製方案 可以減少對象的產生呢。StreamGeometry!StreamGeometry的效率非常之高,因為他是直接 保存位元組流繪製數據的。

     StreamGeometry的工作方式就類似於一臺激光印表機,它可以隨意切換下一次繪製的開始坐標。

    仔細分析一下K線圖,會發現,K線圖是由兩種顏色的柱子組成的。由於DrawingContext一次只能提交一種顏色的填充以及繪製邊緣的命令。所以至少要繪製兩次。

    使用兩個StreamGeometry對象,首先繪製紅色,在繪製綠色,就可以繪製所有的柱子。

   


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Configure Ocserv on CentOS 6 Table of Contents 1. Install ocserv 2. Configure ocserv 3. How to host ocserv and a web server on the same port ? 3.1. Me ...
  • 下麵的這個驅動文件at91_keyled.c在Atmel提供的linux-at91-linux4sam_5.3下實現了按鍵控制LED的亮滅過程,通過這個簡單的驅動描述了基於DTS的驅動開發模型以及Linux內核里的GPIO相關的操作函數。 ...
  • 最近因為一個項目,要折騰一下linux下的iptables。好久沒有用這個東西了,感覺也不會有啥問題,所以連想都沒想就開始弄。開啟內核選項,交叉編譯iptables,移植運行後才發現。我靠~不支持了,需要用新的nftables。奶奶的,我老了,被時代所淘汰了。nfatbles是個啥,就是取代ipta ...
  • 上文《linux環境下編譯memcahed》介紹了memcahed在linux環境下的安裝以及登錄,下麵介紹memcahed的基本命令的使用。 Add 功能:往記憶體增加一條新的緩存記錄 語法:addkeyflagexpirelength 解析: key 給要存的值起一個去一個唯一的名字 flag 標... ...
  • 1.到http://www.apuebook.com/選擇相應的版本下載源碼,我的是2013版的 2.將apue.h拷到/usr/include目錄下 3.將error.c拷到源文件下,編譯的時候帶上。 gcc -g -Wall main.c error.c -o test 開始學APUE,把書上的 ...
  • 一直喜歡用【休眠】,但如果離開的時長有點尷尬,既不想開著機無謂耗電,又不想動用休眠傷硬碟,【睡眠】就成了一種合適的選擇。在XP/WIN7等桌面系統下,是可以很方便的進行睡眠/休眠操作的,開始菜單里點就是。但在伺服器系統下,比如win2k8r2,就不是那麼方便了,在開始菜單中找不到現成選項,我能想到的 ...
  • # 查看區域 firewall-cmd --get-zones # 查看預設區域 firewall-cmd --get-default-zone # 給區域添加永久性服務 firewall-cmd --add-service=http --zone=public --permanent # 刪除區域 ...
  • 1.建尾碼名為reg的新文件,複製以下代碼後點擊運行。 Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\runas]@="管理員取得所有權""NoWorkingDirectory"=""[HKEY_CLASSES_ROOT ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...