本申請涉及電子病歷技術領域,尤其涉及一種主線程COM對象的管理方法和終端設備。
背景技術:
電子病歷系統(electronic medical record system,EMRS)是醫學專用軟件。醫院通過電子病歷以電子化方式記錄患者就診的信息,包括:首頁、病程記錄、檢查檢驗結果、醫囑、手術記錄、護理記錄等等,其中既有結構化信息,也有非結構化的自由文本,還有圖形圖像信息。涉及病人信息的采集、存儲、傳輸、質量控制、統計和利用。
在電子病歷系統中,由于系統復雜,接口眾多,經常會調用第三方組件對象,其中多數為組件對象模型(Component Object Model,COM)對象。眾所周知,COM對象大多數只能在主線程下進行創建與操作,這無疑會影響主線程的運行速度,減慢電子病歷系統的反應速度。
技術實現要素:
有鑒于此,本申請實施例提供了一種主線程COM對象的管理方法和終端設備,用以解決現有技術中對主線程下的COM對象缺乏管理而影響電子病歷系統運行效率的技術問題。
根據本申請實施例的一個方面,提供了一種主線程COM對象的管理方法,包括:啟動電子病歷系統的主線程時,在電子病歷系統的界面的后臺加載一個對象池,用于在對象池中填充COM對象;利用對象池完成對主線程的COM對象的移除、預創建和獲取。
根據本申請實施例的另一方面,提供了一種終端設備,包括:處理器;用于存儲處理器可執行指令的存儲器;其中,處理器被配置為:啟動電子病歷系統的主線程時,在電子病歷系統的界面的后臺加載一個對象池,用于在對象池中填充COM對象;利用對象池完成對COM對象的移除、預創建和獲取。
本申請實施例的有益效果包括:在啟動電子病歷系統的主線程時,在電子病歷系統的后臺記載一個對象池,利用該對象池完成對運行在主線程下的COM對象的管理,完成對COM對象的移除、預創建和獲取等操作,縮短了用戶等待COM對象被加載的時間,提升電子病歷系統的響應速度,也有助于提高用戶的工作效率。
附圖說明
通過以下參照附圖對本申請實施例的描述,本申請的上述以及其它目的、特征和優點將更為清楚,在附圖中:
圖1是本申請實施例的一種主線程COM對象的管理方法;
圖2是本申請實施例的從對象池移除COM對象的流程示意圖;
圖3是本申請實施例的在對象池中預創建COM對象的流程示意圖;
圖4是本申請實施例的從對象池獲取COM對象的流程示意圖;
圖5是本申請實施例的一種終端設備的框圖。
具體實施方式
以下基于實施例對本申請進行描述,但是本申請并不僅僅限于這些實施例。在下文對本申請的細節描述中,詳盡描述了一些特定的細節部分。對本領域技術人員來說沒有這些細節部分的描述也可以完全理解本申請。為了避免混淆本申請的實質,公知的方法、過程、流程、元件和電路并沒有詳細敘述。
此外,本領域普通技術人員應當理解,在此提供的附圖都是為了說明的目的,并且附圖不一定是按比例繪制的。
除非上下文明確要求,否則整個說明書和權利要求書中的“包括”、“包含”等類似詞語應當解釋為包含的含義而不是排他或窮舉的含義;也就是說,是“包括但不限于”的含義。
在本申請的描述中,需要理解的是,術語“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對重要性。此外,在本申請的描述中,除非另有說明,“多個”的含義是兩個或兩個以上。
對電子病歷系統而言,用戶(電子病歷系統的使用者,通常是醫護人員)通常更在乎打開電子病歷時的系統響應時間,用戶認為打開電子病歷時的等待時間越短越好。但是,電子病歷系統中,電子病歷對象的創建周期是不會縮短的,如果每次打開病歷都直接創建一個電子病歷對象,那么創建電子病歷對象的時間就會疊加在某次鼠標或界面按鈕點擊事件下,就會影響到打開病歷時的響應時間。
在優化電子病歷系統時,本申請的發明人發現,電子病歷系統在調用我們所采購的第三方病歷書寫控件時,往往會耗時較長。經過分析得出結果,其中大部分時間是由于創建第三方病歷書寫控件對象時耗時過長。并且由于第三方病歷書寫控件是以COM對象方式提供,由于其自身的限制,僅能夠在主線程下進行操作。這個問題無疑造成我們電子病歷系統反應慢的主要因素。經過測試,發現創建一個病歷書寫控件對象,需要1000毫秒左右的時間,而打開一個病歷文件僅需要20毫秒左右的時間。可以看出,如果減少這1000毫秒是對系統進行優化的重點。
本申請的發明人進一步發現,雖然用戶非常在意病歷打開時的等待時間,但幾乎沒有用戶會在打開病歷后就立刻進行編輯。根據通常的使用習慣,用戶會先閱讀或者檢查該病歷已經書寫的病歷內容,甚至會檢查病歷上的患者基本信息是否有錯誤。而根據一般人的閱讀速度,這段時間至少要5~10秒的碎片時間。
那么,在電子病歷打開后,用戶沒有任何操作的系統閑置時間段內,可以對電子病歷系統主線程下運行的COM對象進行檢測、移除已經釋放的COM對象或者預創建新的COM對象,這是非常值得充分利用的時間段。
基于以上考慮,本申請實施例在啟動電子病歷系統的主線程時,在電子病歷系統的后臺創建一個對象池,以用來存放主線程下的COM對象,利用該對象池完成對運行在主線程下的COM對象的管理,完成對COM對象的移除、預創建和獲取等操作,從而加快電子病歷系統的響應速度,提升用戶的工作效率。
本申請實施例提供了一種主線程COM對象的管理方法,適用于終端設備,終端設備可以是移動電話,計算機,數字廣播終端,消息收發設備,平板設備,醫療設備,健身設備,醫療管理控制臺等。如圖1所示,該方法包括以下步驟。
S10,啟動電子病歷系統的主線程時,在電子病歷系統的界面的后臺加載一個對象池,用于在對象池中填充COM對象。
電子病歷系統的主線程運行后,在后臺創建一個可訪問的對象池,用來存放在該主線程下運行的COM對象。由于COM對象不能進行異步和多線程操作,為了降低其對主線程的運行速度的影響,因此通過對象池來統一管理主線程下的COM對象。對象池可以是一個類,將主線程下運行的各個COM對象作為該類下的元素,例如List<T>類、ArrayList類等。
S11,利用對象池完成對主線程的COM對象的移除、預創建和獲取。
對COM對象的管理包括移除、預創建和獲取等操作。移除是把對象池內不可用的COM對象及時清理;預創建是在系統閑置時間在對象池內創建預留的COM對象,以便需要運行新的COM對象時可以直接使用,減少創建COM對象時的等待時間。獲取是從對象池內直接獲取到一個COM對象供用戶使用,從而區別于現有的直接創建一個新的COM對象的方式。下面對上述移除、預創建、獲取等過程分別進行說明。
圖2是本申請實施例從對象池中移除COM組件的流程示意圖,包括以下步驟。
S110,定期檢測對象池內是否存在已經被釋放或者產生異常的COM對象。
S111,當對象池內存在已經被釋放或者產生異常的COM對象時,移除已經被釋放或者產生異常的COM對象。
在后臺創建對象池的同時或之后,再啟動一個定時器,用來周期性的檢測該對象池內的COM對象。在主線程下運行異常或報錯的COM對象被認為是異常的COM對象。對于已經被釋放(即不再被繼續占用的)的COM對象和產生異常的COM對象及時進行清理,以保證對象池內COM對象都是有效且可用的。
圖3是本申請實施例在對象池中預創建COM組件時的流程示意圖,包括以下步驟。
S112,判斷電子病歷系統是否處于系統閑置時間;或者,是否首次加載COM對象。當電子病歷系統處于系統閑置時間,或者,首次加載COM對象時,執行步驟S113。
首次加載COM對象,是指該電子病歷系統首次打開一個COM對象對應的窗體,此時為了減少用戶的等待時間,肯定需要從對象池中獲取一個預創建的COM對象,因此此時需要向池對象中預創建(或添加)一個COM對象。
如果當前恰好處于系統閑置時間,用戶還沒有打開COM對象對應的窗體,則利用系統閑置時間在對象池內創建一個COM對象。當用戶打開COM對象對應的窗體時,電子病歷系統便從后臺創建的對象池中獲取預創建的COM對象,從而縮短了用戶的等待時間。
S113,判斷對象池內COM對象的數量是否小于或者等于1。當對象池內COM對象的數量小于或者等于1時,執行步驟S114。
如果對象池內COM對象數量大于1,代表對象池內還存在足夠數量的已經預創建COM對象可供電子病歷系統使用。
S114,在對象池內創建一個COM對象。以便用戶真正需要對COM對象進行操作時,直接從對象池獲取預創建的COM對象。
圖4是本申請實施例從對象池獲取COM對象時的流程示意圖,包括以下步驟。
S115,當檢測到針對COM對象的操作時,判斷對象池內COM對象的數量是否大于0。當對象池內COM對象的數量大于0時,執行步驟S116;當對象池內COM對象的數量等于0時,執行步驟S117。
S116,從對象池獲取一個COM對象并在電子病歷系統的界面加載顯示COM對象對應的窗體。
S117,創建一個臨時的COM對象并在電子病歷系統的界面加載顯示臨時的COM對象對應的窗體。
用戶使用COM對象時,會在電子病歷系統的界面中打開一個COM對象所對應的窗體,例如,打開一個電子病歷編輯窗體。電子病歷系統檢測到類似的針對COM對象的操作時,判斷對象池內是否存在已經預創建的COM對象。如果存在,則從對象池中獲取COM對象,獲取后的COM對象運行在電子病歷系統的主線程下;如果不存在,則在電子病歷系統主線程下臨時創建一個COM對象,以便加載在電子病歷系統的界面中供用戶使用。
在一個實施例中,對象池中的COM對象按照一定預設規則排序(例如,創建時間),從對象池獲取COM對象時,獲取對象池頂端的COM對象并在電子病歷系統的界面加載顯示COM對象對應的窗體。再從對象池中將已被獲取的池頂端的COM對象移除,以防止獲取到相同的COM對象而發生異常。
上述在對象池移除、預創建、獲取COM對象的過程,隨著用戶對電子病歷系統的使用,可以分別同時執行。下面以所述COM對象是電子病歷書寫對象為例對本申請實施例進一步進行說明。
打開電子病歷系統后,可以在其系統界面的后臺創建一個全局的對象池,也可以在電子病歷系統“住院病歷”——“病歷書寫主界面”下創建一個對象池。因為在“病歷書寫主界面”下通常會打開多個病人的“病歷編輯窗體”,醫生通過“病歷編輯窗體”對病人的病歷進行編輯。對病歷進行編輯時需要創建電子病歷書寫對象,電子病歷書寫對象在對象池內部被封裝為病歷編輯窗體。
創建的對象池實體是一個List<T>類,其中類型T即代表要管理的對象類型。本實施例中,對象池用于管理被封裝為病歷編輯窗體的電子病歷書寫對象,因此該對象池可表示為List<【病歷編輯窗體】>。
對象池創建完畢后,再添加一個針對該對象池的周期檢測服務,實質是創建一個定時器,該定時器按照預設周期進行定時檢測,檢測對象池List<【病歷編輯窗體】>內是否存在已被釋放或產生異常的電子病歷書寫對象(已被封裝為病歷編輯窗體),如果存在,則移除已被釋放或產生異常的電子病歷書寫對象。移除時,實質是使用List<T>.Remove(T t)方法進行移除。
判斷當前是否處于系統閑置時間,在這里,系統閑置時間是指用戶閱讀病歷的時間。如前文所述,用戶打開一個病歷對象后,多數情況下不會立刻進行編輯,而是要閱讀以前的病歷內容,因此不需要立刻加載電子病歷書寫對象,可以把用戶打開一個病歷對象后的一段時間,例如5~10秒之內的一段時間,判定為系統閑置時間。當檢測到用戶打開一個病歷對象的操作時,便可以判定將要出現5~10秒的系統閑置時間。
如果當前處于系統閑置時間并且對象池List<【病歷編輯窗體】>內的電子病歷書寫對象的數量≤1,則在對象池中創建(或叫做“添加”)一個電子病歷書寫對象。添加時實際使用的方式是List<T>.Add(T t)方法。如果對象池內的電子病歷書寫對象的數量>1,則代表對象池List<【病歷編輯窗體】>內有足夠數量的已經預創建電子病歷書寫對象可以被使用,暫時不需要再次添加電子病歷書寫對象。
當用戶開始對病歷內容進行編輯時,例如點擊界面中的編輯按鈕,則需要加載一個電子病歷書寫對象,由于已經利用了系統閑置時間在對象池中預創建了電子病歷書寫對象,則從對象池中直接獲取一個電子病歷書寫對象,在界面中也就加載顯示一個對應的病歷編輯窗體,從而使用戶不需要花費時間等待創建電子病歷書寫對象,減少了用戶的等待時間,提高用戶工作效率。
由于現有的電子病歷系統在界面中加載顯示一個病歷編輯窗體時,使用的是新建電子病歷書寫對象的方法,那么,在本申請實施例從對象池獲取電子病歷書寫對象,則可以把新建電子病歷書寫對象的方法替換為獲取電子病歷書寫對象的方法。在獲取電子病歷書寫對象時,判斷對象池List<【病歷編輯窗體】>內的電子病歷書寫對象的數量是否>0,如果是,則從對象池獲取一個電子病歷書寫對象并在界面中加載顯示為病歷編輯窗體;如果否,則在電子病歷系統主線程下或者“病歷書寫主界面”下臨時創建一個電子病歷書寫對象,在界面中加載顯示為一個病歷編輯窗體供用戶使用。如果從對象池獲取到了電子病歷書寫對象,則在對象池中將相應的電子病歷對象移除,移除時使用List<T>.Remove(T t)方法進行移除。如果在獲取電子病歷書寫對象時按照預設規則獲取對象池List<【病歷編輯窗體】>頂端的電子病歷書寫對象,則在獲取后將頂端的電子病歷書寫對象移除,同樣使用List<T>.Remove(T t)方法。
本實施例中,用戶在編輯病歷時不需要花費時間等待加載病歷編輯窗體,電子病歷系統直接從對象池獲取已經預創建的電子病歷書寫對象,減少了加載病歷編輯窗體的等待時間,提高了病歷編輯的效率。
此外,本申請實施例中,終端設備可以通過硬件處理器(hardware processor)來實現上述各個功能步驟。如圖5所示,終端設備包括:處理器20,用于存儲處理器20可執行指令的存儲器21;其中,處理器20被配置為:啟動電子病歷系統的主線程時,在電子病歷系統的界面的后臺加載一個對象池,用于在對象池中填充COM對象;利用對象池完成對COM對象的移除、預創建和獲取。
在一個實施例中,利用對象池完成對COM對象的移除包括:定期檢測對象池內是否存在已經被釋放或者產生異常的COM對象;當對象池內存在已經被釋放或者產生異常的COM對象時,移除已經被釋放或者產生異常的COM對象。
在一個實施例中,利用對象池完成對COM對象的預創建包括:判斷電子病歷系統是否處于系統閑置時間;或者,是否首次加載COM對象;電子病歷系統處于系統閑置時間時,或者,首次加載COM對象時,判斷對象池內COM對象的數量是否小于或者等于1;當對象池內COM對象的數量小于或者等于1時,在對象池內創建一個COM對象。
在一個實施例中,利用對象池完成對COM對象的獲取包括:當檢測到針對COM對象的操作時,判斷對象池內COM對象的數量是否大于0;當對象池內COM對象的數量大于0時,從對象池獲取一個COM對象并在電子病歷系統的界面加載顯示COM對象對應的窗體。
當對象池內COM對象的數量等于0時,創建一個臨時的COM對象并在電子病歷系統的界面加載顯示臨時的COM對象對應的窗體。
在一個實施例中,從對象池獲取一個COM對象并在電子病歷系統的界面加載顯示COM對象對應的窗體包括:獲取對象池頂端的COM對象,并在電子病歷系統的界面加載顯示COM對象對應的窗體;從對象池中移除池頂端的COM對象。
在一個實施例中,COM對象是電子病歷書寫對象,在對象池中被封裝為病歷編輯窗體。
在一個實施例中,對象池的實體是List<T>類,其中T代表管理的對象類型,所述對象池管理COM對象時,形成List<已封裝的COM對象>;在對象池中預創建COM對象時,使用List<T>.Add(T t)方法添加COM對象;從對象池移除COM對象時,使用List<T>.Remove(T t)方法移除COM對象。
本領域的技術人員應明白,本申請的實施例可提供為方法、裝置(設備)、或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
本申請是參照根據本申請實施例的方法、裝置(設備)和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執行的指令產生用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執行的指令提供用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
以上所述僅為本申請的優選實施例,并不用于限制本申請,對于本領域技術人員而言,本申請可以有各種改動和變化。凡在本申請的精神和原理之內所作的任何修改、等同替換、改進等,均應包含在本申請的保護范圍之內。