C# 在Razor C中呈现HTML表最有效的方法是什么#

C# 在Razor C中呈现HTML表最有效的方法是什么#,c#,html,razor,razorengine,C#,Html,Razor,Razorengine,我正在尝试创建一个大约有5000行的html表。 我正在从一个SQL数据库中检索数据,该数据库在不到一秒钟的时间内被抓取(我只包含了相关代码): 这个电话够快的 然而,在剃须刀代码中存在瓶颈: <table> <tbody> @foreach (Job job in jobs) { <tr> <td>@job.id</td> <td>@job.Name</td>

我正在尝试创建一个大约有5000行的html表。 我正在从一个SQL数据库中检索数据,该数据库在不到一秒钟的时间内被抓取(我只包含了相关代码):

这个电话够快的

然而,在剃须刀代码中存在瓶颈:

<table>
<tbody>
@foreach (Job job in jobs)
{
    <tr>
       <td>@job.id</td>
       <td>@job.Name</td>
       <td>@job.Description</td>
    </tr>
 }

@foreach(作业中的作业)
{
@job.id
@工作,名字
@工作描述
}

有没有更有效的方法来呈现html表?我知道我可以将转换为使用类,但我不相信这会有明显的区别?

5000行在浏览器上显示的行太多了。 您所采取的任何方法都需要迭代行来生成输出,因此您可能需要考虑使用分页来呈现数据。

使用诸如KnockoutJS或AngularJS之类的html解析器绑定元素将有助于以比此更快的速度呈现页面


或者你可以考虑使用Ajax调用并在页面加载后渲染数据。

你确定瓶颈是用RaRor生成表,而不是浏览器试图渲染它吗?这是一个非常大的表。也许把它放在Web API控制器中,然后用JavaScript中的$.JSON调用数据?这将取决于你的环境和允许你改变的程度。您还可以限制表中显示的记录数量。查看5000条记录似乎有点疯狂。您无需调用.ToList()。这样做会迫使一个列表在内存中具体化,而您不使用它。只需将它作为一个
IEnumerable
@EricJ.,即
dbContext.Jobs。其中…
将返回一个
IQueryable
,而不是
IEnumerable
,在他开始对它进行
foreach
操作时,它将被具体化到内存中,因此
ToList
是否存在实际上并不重要,最终,集合中的每一项都将从数据库中检索出来,并具体化为一个对象。@CraigW。创建一个列表比一次消费一个对象要昂贵。在其他情况下不会有太多,但这是一种成本(而且它也会不必要地消耗内存,这在web应用程序中从来都不是一件好事)。
使用诸如KnockoutJS或AngularJS之类的html解析器绑定元素将有助于以比此更快的速度呈现页面……
引用/证明?是的,Ajax是我的B计划。。我的计划是渲染5000行,隐藏需要显示的行。因此,它使瞬间search@EricJ. 像这样使用Razor视图意味着在服务器端生成输出html,然后将生成的html下载到浏览器中并呈现,与html解析一样,html模板(未填充)+json数据将下载到浏览器中,然后html解析器将生成内容。因此,在razor视图的情况下,下载到浏览器的html的大小要比我们只向浏览器发送json和html模板的情况高出一倍。@Aram:您也必须通过网络下载json。我希望生成的HTML的大小和JSON数据的大小之间存在线性关系,而不是指数关系。与JSON表示相比,HTML表示并不特别臃肿,所以我甚至不确定哪个更大。我也没有看到任何证据表明您的方法对性能有任何好处;事实上,它可能会慢一些。
<table>
<tbody>
@foreach (Job job in jobs)
{
    <tr>
       <td>@job.id</td>
       <td>@job.Name</td>
       <td>@job.Description</td>
    </tr>
 }