2010-11-04 7 views
6

Welche Methode ist besser (Performance-weise), wenn ich Databound wie Gridview, Repeater und/oder Datalist und ich verwende die folgende Methode, um Daten anzuzeigen:Eval und ItemDataBound oder RowDataBound-Ereignis zum Anzeigen von Daten, welche ist besser?

Eval("ColumnName") 

oder Handhabung des ItemDataBound oder RowDataBound Ereignis wie :

void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    // my code to display data here 
} 

ziehe ich die zweite für die Lesbarkeit Grund-Code, aber für die Leistung Grund sind sie gleich (oder sind sie sogar die gleiche Sache)?

Antwort

4

Ich bevorzuge auch die zweite Version. Es ist einfacher für die Fehlersuche und Trennung von HTML & Code meiner Meinung nach.

Nach diesem älteren Dokument, Improving .NET Application Performance and Scalability, ist es effizienter (auf Seite 297 erwähnt).

+1

+1: Debugging-Leichtigkeit versiegelt den Deal für mich. Ich genieße es nie, Code von jemand anderem umzuformen oder zu debuggen, wo alles in Markup eingebunden war. Nun, okay, ich habe * ein * Vergnügen aus der Refactoring-Bemühung, da ich all diesen Crude raushole :) –

+1

Ein anderer Vorteil ist die Fähigkeit, die Daten zu manipulieren, bevor Sie sie auf die Seite setzen. Es kann auf die Art und Weise gemacht werden, aber es kann sehr unordentlich werden. – Lareau

2

Eval könnte schneller sein (hängt von der Situation ab, da es auch zu spät kommt und Reflexion verwendet), aber über DataBound-Event ist es lesbarer und zukunftssicherer.

+0

Derzeit ist nur, was Google gibt mir: http://groups.google.com/group/microsoft.public.dotnet.framework.aspnet/browse_frm/thread/a6dca153057f2aa0?hl=en&lr&ie=UTF-8&rnum=7&prev=/ Gruppen? hl% 3Den% 26lr% 3D% 26ie% 3DUTF-8% 26q% 3D% 2522real% 2Bworld% 2Basp.net% 2522% 26btnG% 3DSuche% 26meta% 3Dgroup% 253Dmicrosoft.public.dotnet.framework.aspnet. * & pli = 1 und http://msdn.microsoft.com/en-us/library/ms178366.aspx –

0

Ich denke, dass beide in Situationen nützlich sind. Der Eval-Weg ist eine schnelle und einfache Möglichkeit, etwas Einfaches zu tun, wenn nicht viel Logik benötigt wird. Aber ich habe gesehen, wie es von unerfahrenen Programmierern missbraucht wurde.

Ich habe vor kurzem die Entwicklung für ein Projekt übernommen, bei dem ein Repeater verwendet wurde. Sie taten etwas wie das Folgende:

<asp:Repeater> 
     <ItemTemplate> 
     Field Visible = '<%# (method(dataItem.a)) %> 
     Field 
     Field Visible = '<%# method(Eval(dataItem.a),Eval(dataItem.b)) %>' 
     Field 
     Field Visible = '<%# (method(dataItem.a)) %>' 
     Field Visible = '<%# (method(dataItem.b)) %>' 
     </ItemTemplate> 
    </asp:Repeater> 

Das war nur schmerzhaft zu betrachten. Es sah so aus, als würden die Entwickler einfach weitere Felder hinzufügen und dieselbe Methode aufrufen, um zu überprüfen, ob das Feld angezeigt werden sollte oder nicht. So etwas könnte leicht in ItemDataBound behandelt werden und ist viel einfacher zu warten. Und Sie sollten immer mit der Erwartung programmieren, dass Ihr Code später geändert/hinzugefügt werden muss.