asp.net-mvc - linq : SQL performance on high loaded web applications

标签 asp.net-mvc linq-to-sql

几周前我开始使用 linq to SQL。我真的厌倦了直接通过 SQL 查询(sqldatareader、sqlcommand 和所有这些好东西)使用 SQL 服务器。

在听说了 linq to SQL 和 mvc 之后,我迅速将我所有的项目都转移到了这些技术上。我原以为 linq to SQL 工作得更慢,但出人意料地发现它非常快,主要是因为我在使用数据读取器时总是忘记关闭我的连接。现在我不必担心了。

但是有一个问题真正困扰着我。有一个页面每天被请求数千次。系统在开始时获取数据,使用它并更新它。主要更新是++ @ --(增加和减少值)。我以前是这样做的

UPDATE table SET value=value+1 WHERE ID=@I'd

它显然没有问题。但是使用 linq to SQL 时,数据会在开始时被获取、移动到类、更改然后保存。

Stats.registeredusers++; Db.submitchanges();

假设有 100000 名用户。 Linq 会说“让它成为 100001”而不是“让它增加 1”。

但是,如果用户的值(value)已经增加(这种情况一直发生在我的网站上),那么 linq 会像哎呀一样,这个值已经是 100001。不管怎样,我都会抛出一个异常“

您可以更改此行为,使其不会抛出异常,但仍不会将值设置为 100002。

就像我说的,它一直在我身边发生。 stas 值平均每秒增加两倍。我只需要用经典的 ado net 重写这 block 代码。

所以我的问题是如何使用 linq 解决问题

最佳答案

对于这些类型的“只写查询”,我通常使用存储过程。您可以将存储过程拖到设计器中并通过 Linq to SQL DataContext 类执行它(它将作为方法添加)。

很抱歉这个陈腐的回答,但它真的很简单;无需使用原始 ADO.NET SqlCommand 对象等进行欺骗,只需导入 SP 即可。或者,如果您想真正地临时执行,请使用ExecuteCommand 方法,如:

context.ExecuteCommand("UPDATE table SET value = value + 1 WHERE ID = {0}", id);

(但不要过度使用它,它可能会变得难以维护,因为逻辑不再包含在您的 DataContext 实例中。并且在有人跳到这个声称它是 SQL 注入(inject)漏洞之前,请注意 ExecuteCommand/ExecuteQuery 是将其转换为参数化语句/查询的智能方法。)

关于asp.net-mvc - linq : SQL performance on high loaded web applications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2550047/

相关文章:

asp.net-mvc - Azure 服务总线等待响应

asp.net-mvc - EPPlus 失去行高

c# - 将 IQueryable 的结果转换为字符串以显示在文本框中

c# - 使用 Linq to SQL 在本地和远程之间切换 `ConnectionStrings`

c# - 如何执行包含条件运算符的 LINQ to SQL 编译查询?

.net - OrderBy、GetNewBindingList 和 Linq to SQL

javascript - 在 ASP.NET MVC 中使用 ajax javascript 调用 View

c# - ASP.NET MVC : No parameterless constructor defined for this object

c# - 如何使用 asp.net MVC 在可折叠列表中表示模型数据

asp.net-mvc - 如何在 LINQ to SQL 中将我的对象保存回我的数据库?