2010-11-04 8 views
6

¿Qué método es mejor (en cuanto al rendimiento) si tengo DataBoundControl como GridView, Repeater, y/o DataList y utilizo el siguiente método para mostrar los datos:Evento Eval e ItemDataBound o RowDataBound para mostrar datos, ¿cuál es mejor?

Eval("ColumnName") 

o controlar el evento ItemDataBound o RowDataBound como :

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

yo prefiero la segunda para la legibilidad del código razón, pero por motivos de rendimiento, son lo mismo (o incluso son la misma cosa)?

Respuesta

4

También prefiero la segunda versión. Es más fácil para la depuración y separación del código html & en mi opinión.

De acuerdo con este documento anterior, Improving .NET Application Performance and Scalability, es más eficiente (mencionado en la página 297).

+1

+1: la facilidad de depuración sella el trato para mí. Nunca me gusta tener que refactorizar o depurar el código de otra persona donde todo estaba vinculado al marcado. Bueno, está bien, obtengo * algún * placer del esfuerzo de refactorización ya que estoy arrancando todo ese polvo :) –

+1

Otra ventaja es la capacidad de manipular los datos antes de ponerlos en la página. Se puede hacer de la manera correcta, pero puede ser realmente complicado. – Lareau

2

Evaluar puede ser más rápido (depende de la situación, porque también está atrasada y utiliza la reflexión), pero a través de DataBound-Event es más legible y más a prueba de futuro.

+0

Actualmente sólo lo que google me da: http://groups.google.com/group/microsoft.public.dotnet.framework.aspnet/browse_frm/thread/a6dca153057f2aa0?hl=en&lr&ie=UTF-8&rnum=7&prev=/ grupos? hl% 3Den% 26lr% 3D% 26ie% 3DUTF-8% 26q% 3D% 2522real% 2Bworld% 2Basp.net% 2522% 26btnG% 3DSearch% 26meta% 3Dgroup% 253Dmicrosoft.public.dotnet.framework.aspnet. * & pli = 1 y http://msdn.microsoft.com/en-us/library/ms178366.aspx –

0

Creo que cada uno es útil en situaciones. La forma de evaluación es una manera rápida y fácil de hacer algo simple si no se necesita mucha lógica. Pero, he visto abusado por programadores inexpertos.

Recientemente me hice cargo del desarrollo de un proyecto en el que usaban un repetidor. Que estaban haciendo algo como lo siguiente:

<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> 

Esto fue sólo dolorosa para mirar. Parecía que los desarrolladores solo seguían agregando más campos y llamando al mismo método para comprobar si el campo debería mostrarse o no. Algo como esto podría manejarse fácilmente en el ItemDataBound y es mucho más fácil de mantener. Y siempre debe programar con la expectativa de que su código tendrá que ser modificado/agregado para más adelante.

Cuestiones relacionadas