首页 新闻 会员 周边 捐助

.net mvc中有个action中有比较耗时的方法,如何优化?

0
悬赏园豆:30 [已解决问题] 解决于 2024-08-19 10:47

目前的问题,用户等待太久;使用了task新建线程来执行期望有所改善,因为这个方法不影响后面的返回结果,看起来也没效果。
public ActionResult AddSome(tInput model)
{
......
Task.Run( () => longTime( model));
return Json(new ResultEntity() { result = true });
}
是否思路有问题? 改为异步 ?麻烦写个简单的demo

NoZeroWu的主页 NoZeroWu | 初学一级 | 园豆:89
提问于:2024-08-15 11:09
< >
分享
最佳答案
0

存在一个问题,longTime()方法如果抛出异常,程序应该捕捉不到吧

收获园豆:30
ufo233- | 初学一级 |园豆:116 | 2024-08-15 16:26
其他回答(6)
0

你给出的代码就是异步在执行longTime 这个method了. 如果没效果就检查 "......" 的代码

czd890 | 园豆:14488 (专家六级) | 2024-08-15 15:21
0

耗时要分析代码,看看是哪里耗时?
如果是数据库查询耗时,就优化慢sql。

楠木大叔 | 园豆:2083 (老鸟四级) | 2024-08-15 21:39
0

慢分多种情况:
1、C#逻辑复杂导致慢
2、执行SQL慢
3、网络有延时慢
可以通过打日志,看慢在哪一步。一般是第二个,如果是数据库慢,通过SQL Server Profiler监听一下慢SQL,再对症下药做优化。

顾星河 | 园豆:7294 (大侠五级) | 2024-08-15 22:39
0

在处理比较耗时的方法时,使用异步操作是一个常见的优化方法,它可以提高系统的响应性能。
在ASP.NET MVC中,你可以将这个耗时的方法改造为异步方法,并使用asyncawait关键字来处理。这样可以将长时间运行的代码在后台线程上执行,并允许主线程继续执行其他操作,从而确保用户在等待期间不会被阻塞。
下面是一个简单的示例代码:
csharp

public async Task<ActionResult> AddSome(tInput model)
{
// 其他代码...
await Task.Run(() => longTime(model)); // 异步执行耗时方法
return Json(new ResultEntity() { result = true });
}
// 耗时的方法
private void longTime(tInput model)
{
// 长时间运行的代码
// 可以在这里执行一些耗时的操作,如IO操作、计算等
}
在上面的示例代码中,通过将AddSome方法标记为异步方法,并在调用耗时方法时使用await Task.Run(...)来实现异步执行。
值得注意的是,这种异步方式并不一定能解决所有性能问题,具体的性能优化还需要根据实际情况和业务需求进行分析和调整。例如,可以考虑使用缓存、异步IO、并行处理等技术来进一步优化。
希望这个简单的示例对你有帮助!如果有需要进一步的解释或其他问题,请随时提问。

Technologyforgood | 园豆:7775 (大侠五级) | 2024-08-16 07:59
0

https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-8.0&tabs=visual-studio#queued-background-tasks

参见上述内容,存在不影响返回的Action,可以将任务放入到后台任务中处理。

写代码的小2B | 园豆:4377 (老鸟四级) | 2024-08-16 16:18
0

试试这样写 Task.Run( async () => await longTime(model));

飞雪连天e^πi+1=0 | 园豆:202 (菜鸟二级) | 2024-08-18 09:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册