performance – Improve querying of Extended Events target file


As part of our server estate monitoring, I am adding extended events to pick up warnings, blocking etc and I’d like to periodically (Every couple of minutes) query the event file to collect the data. I have been using the below to query data using xQuery, but it seems to be quite slow. I am aware of using a fileoffset as an option to optimise, but beyond that, are there any ways in which I can better improve predicates as been below?

    SELECT 
         event_data
        ,n.value('@timestamp', 'DATETIME2') DtTimeStamp
        ,n.value('(action(@name="collect_cpu_cycle_time")/value)(1)', 'bigINT') CollectCpuCycleTime
        ,n.value('(action(@name="collect_system_time")/value)(1)', 'DATETIME2') CollectSystemTime
        ,n.value('(action(@name="last_error")/value)(1)', 'varchar(255)') LastError
        ,n.value('(action(@name="collect_system_time")/value)(1)', 'datetime2')             CollectSystemTime
        ,n.value('(action(@name="task_time")/value)(1)', 'bigint')                          TaskTime
        ,n.value('(action(@name="client_app_name")/value)(1)', 'varchar(255)')              ClientAppName
        ,n.value('(action(@name="client_hostname")/value)(1)', 'varchar(255)')              ClientHostName
        ,n.value('(action(@name="database_name")/value)(1)', 'varchar(255)')                DatabaseName
        ,n.value('(action(@name="nt_username")/value)(1)', 'varchar(255)')                  NtUserName
        ,n.value('(action(@name="server_instance_name")/value)(1)', 'varchar(255)')         InstanceName
        ,n.value('(action(@name="session_id")/value)(1)', 'INT')                            SessionID
        ,n.value('(action(@name="client_pid")/value)(1)', 'INT')                            ClientPID
        ,n.value('(action(@name="sql_text")/value)(1)', 'VARCHAR(MAX)')                         SQLText
    FROM 
        (
            SELECT 
                CAST(event_data as XML) event_data
            FROM 
                sys.fn_xe_file_target_read_file('C:TempEE_QueryWarnings*.xel', null, null, null)
        ) ed
    OUTER APPLY
        ed.event_data.nodes('event') (n)
    WHERE
        n.value('@name', 'varchar(MAX)')    = 'missing_column_statistics'
    AND
        n.value('@timestamp', 'DATETIME2')   >= DATEADD(MINUTE,-10,GETUTCDATE());