webForumDet fria alternativet

Vad är snabbast DataBinder.Eval, Container.DataItem eller DataRowView?

.NET

6 svar · 772 visningar · startad av Lukaspojken

Medlem sedan maj 20011 312 inlägg
Frågan#1

Vilken av dessa rader är den snabbaste? Är det den nedersta raden eftersom den varken använder sig av reflection eller ctype?

<%# DataBinder.Eval(Container.DataItem, "Name") %>

<%# CType(Container.DataItem, System.Data.DataRowView)("Name") %>

<%# Container.DataItem("Name") %>
Medlem sedan sep. 2005673 inlägg
#2

Ursäkta om jag lånar din tråd lite, men får man även passa på att fråga vad exakt det är man egentligen gör när man skriver så här i sin repeater, datalist eller vad det nu kan vara... :)

Medlem sedan dec. 19996 721 inlägg
#3

Det är tänkbart att det sista alternativet är snabbare, men det är inget alternativ i C#, eftersom det inte är typsäkert. Om man programmerar VB och inte tänker uppgradera till C# så kan man dock använda den.

<%Eval("Name") %>

skulle jag rekommendera.

Medlem sedan dec. 19996 721 inlägg
#4

inspiro skrev:

Ursäkta om jag lånar din tråd lite, men får man även passa på att fråga vad exakt det är man egentligen gör när man skriver så här i sin repeater, datalist eller vad det nu kan vara... :)

Man hämtar ut värden från den datakälla som man knutit till kontrollen.

Medlem sedan maj 20011 312 inlägg
#5

Tack för ditt svar! <%Eval("Name") %> har jag aldrig tidigare sett. Är det någon förkortning på <%# DataBinder.Eval(Container.DataItem, "Name") %>? Eller vad innebär den? Sen förstod jag inte riktigt varför du skulle rekommedera den :) Jag menar är <%Eval("Name") %> snabbast eller enbart typsäkerhet eller både och?

Medlem sedan sep. 200278 inlägg
#6

Snabbast lär vara explicit konvertering.

<%# ((Customer)Container.DataItem).CustomerID.ToString() %> t ex. (C#) Om man binder mot t ex en List<Customer> och Customer.CustomerID är en Int32.

Så svaret på din fråga är alternativ 2.

http://groups.google.com/group/microsoft.public.dotnet.framework.aspnet/browse_frm/thread/5d3c727cac4537fc/a02b1685ae0f63c0?q=DataBinder.Eval(Container&rnum=4&hl=en#a02b1685ae0f63c0

Medlem sedan dec. 19996 721 inlägg
#7

Lukaspojken skrev:

Tack för ditt svar! <%Eval("Name") %> har jag aldrig tidigare sett. Är det någon förkortning på <%# DataBinder.Eval(Container.DataItem, "Name") %>?

Japp, i ASP.NET 2.0.

Lukaspojken skrev:

Sen förstod jag inte riktigt varför du skulle rekommedera den :) Jag menar är <%Eval("Name") %> snabbast eller enbart typsäkerhet eller både och?

Jag menar att det ger den tydligaste lagerseparationen och jag undviker helst hårdtypad kod i aspx-filerna. Då lägger jag hellre en asp:label el. liknande på plats och sätter dess innehåll från codebehind.

390 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
125 ms — deklarationer (db)
124 ms — hämta statistik (db)
139 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)