Asp.net 信号机中的数据库广播
我已经在这里实现了教程,下一步是首先通过EF代码将其连接到SQL db 在StockTicker类中,作者编写以下代码:Asp.net 信号机中的数据库广播,asp.net,entity-framework,asp.net-web-api,signalr,Asp.net,Entity Framework,Asp.net Web Api,Signalr,我已经在这里实现了教程,下一步是首先通过EF代码将其连接到SQL db 在StockTicker类中,作者编写以下代码: foreach (var stock in _stocks.Values) { if (TryUpdateStockPrice(stock)) { BroadcastStockPrice(stock); } } 我正在开发的应用程序需要一个小受众(大约300个用户)的实时推送新闻提要。简单地做(伪)这样的事情会有什么坏处 将数据库中的
foreach (var stock in _stocks.Values)
{
if (TryUpdateStockPrice(stock))
{
BroadcastStockPrice(stock);
}
}
我正在开发的应用程序需要一个小受众(大约300个用户)的实时推送新闻提要。简单地做(伪)这样的事情会有什么坏处
将数据库中的每条消息状态更新为!=在不完全影响性能的情况下实现新功能?我认为确定您的简单解决方案是否过度影响性能的最佳方法是尝试一下 类似于下面的内容应该可以用于更新每个消息状态
foreach(在_db.Messages.Where(x=>x.Status==“New”)中的var消息)
{
广播讯息(讯息);
message.Status=“已读”;
}
_db.SubmitChanges();
如果您发现这样做效率太低,您可以编写一个选择新邮件并将其标记为已读的
通过调整轮询数据库和批处理消息的速率来微调性能可能更好,这样即使在数据库返回多条新消息时,也可以通过SignalR为每个DB查询广播一条消息
如果您决定使用存储过程路由,下面是另一篇相当深入的文章,介绍如何将它们与EF一起使用:对于可以使用sql的更新。类似这样的
\u db.Database.ExecuteSqlCommand(“更新消息集状态='Read'其中状态='New')代码>我更喜欢使用using语句using(var db=new Context())db.Database.ExecuteSqlCommand(“更新消息集状态='Read'其中状态='new')代码>
foreach (var message in _db.Messages.Where(x => x.Status == "New")
{
BroadcastMessage(message)
}