2010-05-22 4 views
0

Я имею дело с ситуацией, в которой мне нужна помощь. Мне нужно повысить производительность по функциональности, которая записывает и обновляет пользовательский интерфейс с информацией о выборе пользователя. То, что мой текущий ток составляетУлучшение кода и производительности пользовательского интерфейса

'This is called to update the Database each time the user 
'makes a new selection on the UI 

Private Sub OnFilterChanged(String newReviewValueToAdd) 
    AddRecentViewToDB(newReviewValueToAdd) 
    UpdateRecentViewsUI() 
    PageReviewGrid.Rebind()'Call Grid Rebind  
End Sub 


'This is the code that handles updating the UI with the Updated selection 
Private Sub UpdateRecentViewsUI() 
    Dim rlNode As RadTreeNode = radTree.FindNodeByValue("myreviewnode") 
    Dim Obj As Setting 
    Dim treenode As RadTreeNode 
    For i As Integer = 0 To Count - 1 
     Obj = Setting.Review.Item(i) 
     treenode = New RadTreeNode(datetime.now.ToString,i.ToString()) 
     treenode.ToolTip = obj.GetFilter 
     radNode1.Nodes.Add(treenode) 
    Next 
End Sub 

ответ

1

Во-первых, вам нужно определить, какая часть, которая на самом деле работает медленно. Обычно это проще всего выполнить с помощью профилировщика, но вы можете просто использовать класс Stopwatch.

Как только вы определили медленную часть, , то вы можете думать о том, как сделать это быстрее.

Как я уже сказал, самая медленная часть, вероятно, относится к вашему методу AddRecentViewToDB: Я предполагаю, что это запись в базу данных. Более простой способ ускорить пользовательский интерфейс - фактически выполнить этот шаг на рабочем потоке в фоновом режиме. Для этого существует класс BackgroundWorker, что делает его относительно простым.

Если это не то, что вызывает замедление, то вам нужно вернуться к шагу 1 выше и узнать, что медленно.

0

Простой способ повысить производительность - это делать работу реже. Добавить заявление в OnFilterChanged, например:

' Only do this once every 50 updates, to improve performance 
if ((update_counter % 50) != 0) 
{ 
    update_counter += 1; 
    ' or do this one every second 
    if (update_time_now - update_time_last_update < 1 second) 
    return; 
} 
update_time_last_update = update_time_now; 
update_counter = 0; 
Смежные вопросы