这或多或少是一个设计问题。我们必须像100万行一样处理并将xml发送给第三方。最初我们必须发送100万条记录,之后我们只发送增量。
现在,存储过程大约需要15到20分钟才能返回数据。它是一个consoleapp权限。我知道这不是一次获得100万条记录的好方法。
我想知道以下事情 1)连接到数据库的c#中的控制台应用程序是否接近 2)还有其他方法吗?
感谢你对此的指导,不需要任何编码等等,我们需要一些关于如何进行的建议。 提前谢谢。
答案 0 :(得分:3)
我的想法:
IDataReader
或LINQ XmlWriter
直接,或者XStreamingElement
- 在任何一种情况下都可以从上面的来源阅读这大大减少了您需要的内存量,并允许您的计算机在等待网络IO时执行一些有用的操作
答案 1 :(得分:1)
Re 1:取决于您的架构。那么简单。这是一种VIABLE方法。
回复2:是的,吨。全部都是可以的。您可以根据请求制作处理数据生成的系统服务。你可以有一个Web应用程序。
一般来说,一个控制台应用程序可以正常工作,结果集中的100万行也不是很多。完全可行。
但是,1-20分钟是奇怪的。花在哪里的时间? 100万行转移和写出不超过2-3分钟。答案 2 :(得分:1)
1)是的,为什么不呢。
2)是的。
使用游标。
答案 3 :(得分:1)
您需要更加具体地了解您在15到20分钟内所做的事情。
您在询问“正确”的做事方式 - 您在优化什么?
速度?一个15 - 20分钟的存储过程听起来很危险。它在做什么?
维护/可读性?控制台应用程序将工作。测试(单元测试等)比存储过程更容易。
我从不喜欢长时间运行的存储过程,因为它不容易看到进度。至少使用控制台应用程序,您可以输出某些内容
答案 4 :(得分:1)
相信我,100万条记录对于着名的商业数据库来说并不是什么大不了的事情,返回记录的时间不值15到20分钟。别的地方错了!您是否在存储过程中构建XML文件?如果是,请删除它们并在C#中实现XML构建。 SP只有一个简单的任务:获取数据。如果您没有在另外100万条记录上加入100万条记录,则不会花费很长时间。在数据进入应用程序之后(在这种情况下控制台应用程序就可以了),使用LINQ-to-XML构建XML。如果您仍然不满意效果,请创建代码parallel。
编辑您的SP非常耗时,您需要对其进行优化。例如:在具有1m记录的SP T_Data中,连接T_User和1m记录需要花费大量时间。优化后:在SP中T_Data连接T_User中的一条记录(几乎是一个非常快的WHERE表达式),在C#代码中,您从T_User获取记录,对于每条记录,调用SP并获取数据,然后构建一条您的XML的部分 / * piece *。所有这些都可以同时处理。最后,将所有XML部分合并为一个。