Performance online vs. offline mode

Performance online vs. offline mode

avatar
jan-pieter
Disabled

Hello,

We're using a SQL Server connection and at some stages (esp. when the treeview is being build as it seems) the response feels slow.
For example when switching from the private vault to the all entries in online mode it takes about 5 secs to be able to continu whilst in offline mode it is "immediate".

Below are several diagnostics measurements and I'm wondering if (esp. the online ones appear to be normal).
Two of the measurements are on debug level 0 and two are on debug level 256. For the latter I saw some strange behaviour because when on debug level 256 the response off and online it the same whilst on debug level 0 they are not ...

--- online, debug level 0
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 40 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 55 ms
TreeView.LoadConnectionList : 59 ms
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 13 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 27 ms
TreeView.LoadConnectionList : 32 ms
LoadConnectionList...
LoadConnectionList : 0 ms
LoadConnections [Microsoft SQL Server/SQL Azure : xxx]...
Connection cache up to date
DecryptData : 0 ms - Count : 382
DeserializeData : 164 ms - Count : 382
LoadConnections [Microsoft SQL Server/SQL Azure : xxx] : 2356 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 120 ms
PreCreateGroups : 5 ms - Count : 1
BeginUpdate : 22 ms
TreeView.LoadConnectionList : 157 ms

--- offline, debug level 0
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 3 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 59 ms
TreeView.LoadConnectionList : 63 ms
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 1 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 25 ms
TreeView.LoadConnectionList : 31 ms
LoadConnectionList...
LoadConnectionList : 0 ms
LoadConnections [Microsoft SQL Server/SQL Azure : xxx (Offline)]...
LoadConnections [Microsoft SQL Server/SQL Azure : xxx (Offline)] : 20 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 98 ms
PreCreateGroups : 4 ms - Count : 1
BeginUpdate : 18 ms
TreeView.LoadConnectionList : 130 ms

--- online, debug level 256
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 48 ms
TreeView.LoadConnectionList...
Tree view is loading 6 connections
GetGroupInfos : 0 ms
BeginUpdate...
<removed info for 6 connections>
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 20 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 53 ms
TreeView.LoadConnectionList : 87 ms
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 16 ms
TreeView.LoadConnectionList...
Tree view is loading 6 connections
GetGroupInfos : 0 ms
BeginUpdate...
<removed info for 6 connections>
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 19 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 50 ms
TreeView.LoadConnectionList : 81 ms
LoadConnectionList...
LoadConnectionList : 0 ms
LoadConnections [Microsoft SQL Server/SQL Azure : xxx]...
Connection cache up to date
DecryptData : 0 ms - Count : 382
DeserializeData : 125 ms - Count : 382
LoadConnections [Microsoft SQL Server/SQL Azure : xxx] : 1537 ms
TreeView.LoadConnectionList...
Tree view is loading 893 connections
GetGroupInfos : 0 ms
BeginUpdate...
<removed info for 893 connections>
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 4987 ms
PreCreateGroups : 5 ms - Count : 1
BeginUpdate : 19 ms
TreeView.LoadConnectionList : 5031 ms
LoadConnectionList...
LoadConnectionList : 0 ms

--- offline, debug level 256
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 4 ms
TreeView.LoadConnectionList...
Tree view is loading 6 connections
GetGroupInfos : 0 ms
BeginUpdate...
<removed info for 6 connections>
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 20 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 56 ms
TreeView.LoadConnectionList : 88 ms
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 1 ms
TreeView.LoadConnectionList...
Tree view is loading 6 connections
GetGroupInfos : 0 ms
BeginUpdate...
<removed info for 6 connections>
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 21 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 38 ms
TreeView.LoadConnectionList : 71 ms
LoadConnectionList...
LoadConnectionList : 0 ms
LoadConnections [Microsoft SQL Server/SQL Azure : xxx (Offline)]...
LoadConnections [Microsoft SQL Server/SQL Azure : xxx (Offline)] : 11 ms
TreeView.LoadConnectionList...
Tree view is loading 893 connections
GetGroupInfos : 0 ms
BeginUpdate...
<removed info for 893 connections>
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 4933 ms
PreCreateGroups : 5 ms - Count : 1
BeginUpdate : 23 ms
TreeView.LoadConnectionList : 4979 ms

Regards,
Jan-Pieter

All Comments (4)

avatar

Jan-Pieter,

Could you try the same steps but with debug level set to 192 (Connection Cache + Offline Mode).

Debug level 256 (Load connections detail) will slow down (drastically) the loading since it logs an entry for every session (in your case almost 900). This debug flag should only be used when trying to diagnose session load issues (disappearing sessions or corrupt type session issues).

Also, when you post the log trace, please use the [ code ] [ / code ] tags, remove the spaces this will keep the formatting and help us follow the trace flow.

Sample:
LoadConnections [Microsoft SQL Server/SQL Azure : Jump] - 64-bit...
Connection cache up to date
LoadConnections [Microsoft SQL Server/SQL Azure : Jump] - 64-bit : 14 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 1 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 83 ms
TreeView.LoadConnectionList : 176 ms
Regards,

Stéfane Lavergne

avatar

Stefane,

No problem.

Herewith the same actions as before. This morning however the response seems a lot better (even for editing properties of a session) - maybe no one is changing entries at the moment :)

Online, debug level 0
<code>
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 87 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 35 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 85 ms
TreeView.LoadConnectionList : 93 ms
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 6 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 29 ms
TreeView.LoadConnectionList : 34 ms
LoadConnectionList...
LoadConnectionList : 0 ms
LoadConnections [Microsoft SQL Server/SQL Azure : xxx]...
Connection cache up to date
DecryptData : 1 ms - Count : 387
DeserializeData : 182 ms - Count : 387
LoadConnections [Microsoft SQL Server/SQL Azure : xxx] : 1114 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 108 ms
PreCreateGroups : 4 ms - Count : 1
BeginUpdate : 16 ms
TreeView.LoadConnectionList : 139 ms
LoadConnectionList...
LoadConnectionList : 26 ms
</code>

Offline, debug level 0
<code>
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 3 ms
TreeView.LoadConnectionList...
GetGroupInfos : 1 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 31 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 84 ms
TreeView.LoadConnectionList : 91 ms
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 1 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 28 ms
TreeView.LoadConnectionList : 35 ms
LoadConnectionList...
LoadConnectionList : 0 ms
LoadConnections [Microsoft SQL Server/SQL Azure : xxx (Offline)]...
LoadConnections [Microsoft SQL Server/SQL Azure : xxx (Offline)] : 15 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 96 ms
PreCreateGroups : 4 ms - Count : 1
BeginUpdate : 16 ms
TreeView.LoadConnectionList : 126 ms
LoadConnectionList...
LoadConnectionList : 52 ms
</code>

Online, debug level 192
<code>
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 7 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 30 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 79 ms
TreeView.LoadConnectionList : 86 ms
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 7 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 28 ms
TreeView.LoadConnectionList : 33 ms
LoadConnectionList...
LoadConnectionList : 0 ms
LoadConnections [Microsoft SQL Server/SQL Azure : xxx]...
Connection cache up to date
DecryptData : 0 ms - Count : 387
DeserializeData : 138 ms - Count : 387
LoadConnections [Microsoft SQL Server/SQL Azure : xxx] : 1449 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 101 ms
PreCreateGroups : 10 ms - Count : 1
BeginUpdate : 18 ms
TreeView.LoadConnectionList : 140 ms
LoadConnectionList...
LoadConnectionList : 46 ms
</code>

Offline, debug level 192
<code>
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 1 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 24 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 77 ms
TreeView.LoadConnectionList : 81 ms
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 1 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 28 ms
TreeView.LoadConnectionList : 35 ms
LoadConnectionList...
LoadConnectionList : 0 ms
LoadConnections [Microsoft SQL Server/SQL Azure : xxx (Offline)]...
LoadConnections [Microsoft SQL Server/SQL Azure : xxx (Offline)] : 14 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 99 ms
PreCreateGroups : 5 ms - Count : 1
BeginUpdate : 16 ms
TreeView.LoadConnectionList : 128 ms
LoadConnectionList...
LoadConnectionList : 47 ms
</code>

Regards,
Jan-Pieter

avatar

Online, debug level 0
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 87 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 35 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 85 ms
TreeView.LoadConnectionList : 93 ms
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 6 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 29 ms
TreeView.LoadConnectionList : 34 ms
LoadConnectionList...
LoadConnectionList : 0 ms
LoadConnections [Microsoft SQL Server/SQL Azure : xxx]...
Connection cache up to date
DecryptData : 1 ms - Count : 387
DeserializeData : 182 ms - Count : 387
LoadConnections [Microsoft SQL Server/SQL Azure : xxx] : 1114 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 108 ms
PreCreateGroups : 4 ms - Count : 1
BeginUpdate : 16 ms
TreeView.LoadConnectionList : 139 ms
LoadConnectionList...
LoadConnectionList : 26 ms

Offline, debug level 0
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 3 ms
TreeView.LoadConnectionList...
GetGroupInfos : 1 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 31 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 84 ms
TreeView.LoadConnectionList : 91 ms
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 1 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 28 ms
TreeView.LoadConnectionList : 35 ms
LoadConnectionList...
LoadConnectionList : 0 ms
LoadConnections [Microsoft SQL Server/SQL Azure : xxx (Offline)]...
LoadConnections [Microsoft SQL Server/SQL Azure : xxx (Offline)] : 15 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 96 ms
PreCreateGroups : 4 ms - Count : 1
BeginUpdate : 16 ms
TreeView.LoadConnectionList : 126 ms
LoadConnectionList...
LoadConnectionList : 52 ms

Online, debug level 192
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 7 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 30 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 79 ms
TreeView.LoadConnectionList : 86 ms
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 7 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 28 ms
TreeView.LoadConnectionList : 33 ms
LoadConnectionList...
LoadConnectionList : 0 ms
LoadConnections [Microsoft SQL Server/SQL Azure : xxx]...
Connection cache up to date
DecryptData : 0 ms - Count : 387
DeserializeData : 138 ms - Count : 387
LoadConnections [Microsoft SQL Server/SQL Azure : xxx] : 1449 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 101 ms
PreCreateGroups : 10 ms - Count : 1
BeginUpdate : 18 ms
TreeView.LoadConnectionList : 140 ms
LoadConnectionList...
LoadConnectionList : 46 ms

Offline, debug level 192
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 1 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 24 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 77 ms
TreeView.LoadConnectionList : 81 ms
PersonalConnectionManager.Refresh...
PersonalConnectionManager.Refresh : 1 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
LoadConnectionList...
LoadConnectionList : 0 ms
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 0 ms
PreCreateGroups : 0 ms - Count : 1
BeginUpdate : 28 ms
TreeView.LoadConnectionList : 35 ms
LoadConnectionList...
LoadConnectionList : 0 ms
LoadConnections [Microsoft SQL Server/SQL Azure : xxx (Offline)]...
LoadConnections [Microsoft SQL Server/SQL Azure : xxx (Offline)] : 14 ms
TreeView.LoadConnectionList...
GetGroupInfos : 0 ms
BeginUpdate...
ApplyGroupCustomImages : 0 ms
LoadConnectionInTreeNode : 99 ms
PreCreateGroups : 5 ms - Count : 1
BeginUpdate : 16 ms
TreeView.LoadConnectionList : 128 ms
LoadConnectionList...
LoadConnectionList : 47 ms

avatar

Looking at your new profiler output, all looks good and fast.

Before:
OnlineTreeView.LoadConnectionList : 5031 msOfflineTreeView.LoadConnectionList : 4979 msCompared withTreeView.LoadConnectionList : 128 mswith debug level not set to 256 (Load connections detail)


As for Offline/Online performance. Offline reads/writes to a local (SQLite) file. This will always be faster than online since we execute the same exact steps plus we check the data source for any modifications (delta) and apply any such delta to the client.


As a rule of thumb, running with debug level = 0 is your best option.


Regards,

Stéfane Lavergne