From caf45545c61b995f5f2bbd335369a28203f07e5d Mon Sep 17 00:00:00 2001 From: MichaelKaesemann Date: Fri, 27 Oct 2017 10:56:15 +0200 Subject: [PATCH] Added Settings Buffering for Performance Optimization in Object System (#1032) - Added buffering of the settings in a settings object in class lcl_persist_settings to buffer the settings and return them directly, because so far each creation of an object type handler or checking if an object type is supported (which is done by creating an instance of the object type handler) caused a database access to table ZABAPGIT to read and deserialize the settings. --- src/zabapgit_persistence.prog.abap | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 144784bb0..1135ab22d 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -372,8 +372,9 @@ CLASS lcl_persist_settings DEFINITION FINAL. METHODS read RETURNING VALUE(ro_settings) TYPE REF TO lcl_settings. - PRIVATE SECTION. + PRIVATE SECTION. + DATA: mo_settings TYPE REF TO lcl_settings. ENDCLASS. @@ -1879,15 +1880,30 @@ CLASS lcl_persist_settings IMPLEMENTATION. METHOD modify. + DATA: settings TYPE string. + settings = io_settings->get_settings_xml( ). + lcl_app=>db( )->modify( iv_type = lcl_settings=>c_dbtype_settings iv_value = '' - iv_data = io_settings->get_settings_xml( ) ). + iv_data = settings ). + + " Settings have been modified: Update Buffered Settings + IF mo_settings IS BOUND. + mo_settings->set_xml_settings( settings ). + ENDIF. ENDMETHOD. METHOD read. + IF mo_settings IS BOUND. + " Return Buffered Settings + ro_settings = mo_settings. + RETURN. + ENDIF. + + " Settings have changed or have not yet been loaded CREATE OBJECT ro_settings. TRY. @@ -1902,6 +1918,8 @@ CLASS lcl_persist_settings IMPLEMENTATION. ENDTRY. + mo_settings = ro_settings. + ENDMETHOD. ENDCLASS.