【发布时间】:2020-10-27 14:37:29
【问题描述】:
我正在尝试清理解决方案中的一些页面。页面或表格的加载速度比我想要的要慢。我正在使用视图模型并在表格中的页面上执行 Foreach,然后使用数据表进行显示。似乎在数据库端它一次加载每条记录 1 并且有 1000 条记录需要很长时间才能加载。当我在 SQL 中运行查询时,它会立即填充。我正在寻找一些帮助来清理代码,看看这里是否有什么可以改变的,以使其加载更快。由于我在页面中使用 foreach,因此 DeferRender 不起作用。如果我使用这个或 JavaScript 对我来说并不重要,当然服务器端编码是一种选择。在控制器中,数组的使用也可能有效,但我不知道如何将它与视图模型合并。 “db.Companys.ToArray();”适用于从模型中提取,但据我所知 ToArray 不适用于 viewModel。
下面是我的代码。
控制器:
public ActionResult Index()
{
var data = (from temp in db.TopLvlJobs
join serial in db.SerialNumbers on temp.TopLvlJob equals serial.TopLvlJob
select new TopLvlJobsViewModels
{
PartNumber = temp.PartNumber,
Description = temp.Description,
ExtDescription = temp.ExtDescription,
Drawing = temp.Drawing,
IsDelete = false,
CreatedDate = DateTime.UtcNow,
UpgradeAvailable = temp.UpgradeAvailable,
TopLvlJob = temp.TopLvlJob,
SerialNumber = serial.SerialNumber
}).OrderBy(x => x.CreatedDate);
return View(data);
}
视图模型:
public class TopLvlJobsViewModels
{
[Key]
[Display(Name = "TopLvlJob")]
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string TopLvlJob { get; set; }
[Display(Name = "Description")]
[Required]
public string Description { get; set; }
[Display(Name = "Ext Description")]
[Required]
public string ExtDescription { get; set; }
[Display(Name = "Part Number")]
[Required]
public string PartNumber { get; set; }
[Display(Name = "Drawing")]
[Required]
public string Drawing { get; set; }
[UIHint("_IsStatus")]
[Display(Name = "Upgrade Available ?")]
[Required]
public bool UpgradeAvailable { get; set; }
public DateTime? CreatedDate { get; set; }
public string CreatedBy { get; set; }
public DateTime? UpdatedDate { get; set; }
public string UpdatedBy { get; set; }
public bool? IsDelete { get; set; }
[Display(Name = "Serial")]
public string SerialNumber { get; set; }
public TopLvlJobs topsjobs { get; set; }
public HttpPostedFileBase Pdfupload { get; set; }
public virtual IEnumerable<SubJobs> SubJobs { get; set; }
public virtual IEnumerable<Upgrades> Upgrade { get; set; }
}
.CHTML 页面上的 JavaScript
$(document).ready(function () {
//var oTableMenuPermission = "";
//oTableMenuPermission =
$("#SubJobsListTable").dataTable({
"bRetrieve": true,
"bProcessing": true,
"dom": 'lBfrtip',
"buttons": [
{ extend: 'copyHtml5', exportOptions: { columns: ':visible' } }
, { extend: 'excelHtml5', exportOptions: { columns: ':visible' } }
, { extend: 'csvHtml5', exportOptions: { columns: ':visible' } }
, { extend: 'pdfHtml5', exportOptions: { columns: ':visible' } }
, { extend: 'print', exportOptions: { columns: ':visible' } }
, 'colvis'
], columnDefs: [{ visible: false, targets: [3] }, { orderable: false, targets: [2, 3, 4, 5, 6, 7, 8] }],
"pageLength": 10,
"lengthMenu": [[5, 10, 25, 50, -1], [5, 10, 25, 50, "All"]],
});
//table.buttons().container()
// .appendTo($('.col-lg-8:eq(0)', table.table().container()));
});
我可以给你任何需要的东西,由于篇幅原因我没有发布整个 CHTML 页面,但它只是表格视图中的一个基本 Foreach。
感谢您的帮助!
【问题讨论】:
-
不清楚延迟是查询还是填充视图的时间。连接字符串使用哪个驱动程序?查询速度是服务器和传输数据时间量的函数。有些司机比其他司机快。所以我现在不知道是什么导致了这个问题。
-
@jdweng 我不确定您所说的驱动程序是什么意思。我相信这是查询或查询的方式。我使用分析器并在填充时查看。似乎是分别查询每条记录。我将在分析器填充时发布一个 sn-p。
-
查看以下网页顶部:connectionstrings.com/sql-server
-
@jdweng 我不确定我之前在分析器中做了什么来查看我所看到的。我刚刚开始研究这个。但是,在页面完全加载之前,似乎在服务器上完成了批处理..
-
@jdweng 我现在明白你的意思了。我不知道它使用的是什么驱动程序。连接是通过实体框架实现的,我认为我无法控制它。我在连接字符串中唯一拥有的是 ProviderName="System.Data.SqlClient"。这是在 Web.config 中。
标签: javascript c# asp.net-mvc datatables