gpt4 book ai didi

C# SQL 查询阻塞服务器内存

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:35 24 4
gpt4 key购买 nike

我还是个新手,我被分配了维护以前完成的代码的任务。我有一个模拟 SQL Management Studio 的网站,例如限制删除选项,因此基本用户不会搞砸我们的服务器。好吧,我们有一个需要一个或多个查询的函数,它工作正常,但是我们的服务器 RAM 被复杂的查询炸毁了,也许它不是那么多数据,但它的转换 xml 和所有我仍然不知道的东西理解 SQL。

这是实际的功能:

public DataSet ExecuteMultipleQueries(string queries)
{
var results = new DataSet();
using (var myConnection = new SqlConnection(_connectionString))
{
myConnection.Open();
var sqlCommand = myConnection.CreateCommand();
sqlCommand.Transaction = myConnection.BeginTransaction(IsolationLevel.ReadUncommitted);
sqlCommand.CommandTimeout = AppSettings.SqlTimeout;
sqlCommand.CommandText = queries.Trim();
var dataAdapter = new SqlDataAdapter { SelectCommand = sqlCommand };
dataAdapter.Fill(results);
return results;
}
}

我有点迷茫,我读过很多不同的答案,但要么我没有正确理解它们,要么它们没有以任何方式解决我的问题。

我知道我可以使用 Linq-toSql- 或 Entity,我尝试过它们但我真的不知道如何将它们用于“未知”查询,无论如何我可以尝试研究更多所以如果你认为它们会有所帮助我正在接近一个解决方案,无论如何,我会尝试学习它。

说到点子上:

函数似乎在调试时停止在 dataAdapter.Fill(results) 处,此时服务器尝试回答查询并消耗其所有 RAM 并阻塞自身。我该如何解决这个问题?我想也许可以通过让SQL返回一定数量的数据,将其存储在某个集合中,然后继续返回数据,并继续下去,直到没有更多的数据从SQL返回,但我真的不知道如何检测是否有任何数据要从 SQL 返回。

我也考虑过在两个不同的线程中读取和存储,但我不知道一个线程中的数据如何异步存储在另一个线程中(如果它解决了这个问题甚至更少)。

所以,是的,我一点都不清楚,所以非常感谢任何指导或提示。

提前致谢,抱歉发了这么长的帖子。

最佳答案

您可以使用分页来仅获取部分数据。

你的代码将是这样的:

dataAdapter.Fill(results, 0, pageSize);

pageSize 可以是您想要的大小(例如 100 或 250)。

您可以在 this 中获得更多信息msdn 文章。

关于C# SQL 查询阻塞服务器内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42226680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com