有没有比DataTable.Load(DataReader)填充数据表更快更智能的方法? C#

有没有比DataTable.Load(DataReader)填充数据表更快更智能的方法? C#,第1张

概述我正在做一些研究,以便更好地理解SQL并使用DataTables. 所以我试图从MS SQL数据库中获得良好的性能读取数据并将其加载到datagridview中. 我已经创建了一个SQL函数,我从我的工具调用它并将结果加载到数据表中. 如果我在SSMS中执行此功能,则需要11-12秒来加载结果(差不多150万个条目),但如果我使用该工具执行此功能,我编码,则需要30秒以上(仅做DataTable. 我正在做一些研究,以便更好地理解sql并使用Datatables.
所以我试图从MS sql数据库中获得良好的性能读取数据并将其加载到datagrIDvIEw中.

我已经创建了一个sql函数,我从我的工具调用它并将结果加载到数据表中.
如果我在SSMS中执行此功能,则需要11-12秒来加载结果(差不多150万个条目),但如果我使用该工具执行此功能,我编码,则需要30秒以上(仅做Datatable.Load(sqlDataReader))

到目前为止我所做的是:

private Datatable GetDataFromDB(string userID,string docID,DateTimeOffset date)    {                    string cmd = String.Format("select * from dbo.GetData(@userID,@docID,@dueDate);");        using (sqlConnection conn = new sqlConnection(connectionString))        {            if (conn.State != ConnectionState.Open)                conn.open();            sqlCommand command = new sqlCommand(cmd,conn);            if (String.IsNullOrEmpty(userID))                command.Parameters.AdDWithValue("@userID",dbnull.Value);            else                command.Parameters.AdDWithValue("@userID",userID);            if (String.IsNullOrEmpty(docID))                command.Parameters.AdDWithValue("@docID",dbnull.Value);            else                command.Parameters.AdDWithValue("@docID",docID);            command.Parameters.AdDWithValue("@dueDate",dueDate);            sqlDataReader reader = command.ExecuteReader();            stopWatch.reset();            stopWatch.Start();            table.BeginLoadData();            table.Load(reader,LoadOption.Upsert);            table.EndLoadData();            stopWatch.Stop();            reader.Close();            reader.dispose();            conn.Close();        }        return table;    }

我已经做了一些谷歌研究,这是我能想到的最好的.到目前为止它运作良好,但我很好奇是否有可能更快地获得结果.有任何想法吗?
我的内存也有问题.一旦我开始通话,该工具将分配高达900MB的RAM,直到它具有所有条目.我已经管理过,每次调用上面的函数时都要释放内存,但我认为,900MB是相当多的,另一个问题是,它不会释放所有需要的RAM.例如:当我启动该工具时,它需要大约7MB的RAM,如果我第一次调用上面的方法,它将需要900MB.如果我下次调用它,它将释放大部分内存,但仍需要930MB.第三次960MB等.因此,每次调用它会分配更多的内存,这会导致“系统内存不足”-Exception,如果经常调用此方法.

非常感谢!

解决方法 性能将根据您加载的数据量和数量而有所不同.
下面的链接将为您提供性能报告的解决方案.用你的方法尝试这样的东西,并比较性能.

希望这会帮助你.

Fastest way to populate datatable

总结

以上是内存溢出为你收集整理的有没有比DataTable.Load(DataReader)填充数据表更快/更智能的方法? C#全部内容,希望文章能够帮你解决有没有比DataTable.Load(DataReader)填充数据表更快/更智能的方法? C#所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1232207.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存