我正在做一些研究,以便更好地理解sql并使用DataTables.
所以我试图从MS sql数据库中获得良好的性能读取数据并将其加载到datagridview中.
所以我试图从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,如果经常调用此方法.
非常感谢!
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。