【发布时间】:2011-02-03 17:28:38
【问题描述】:
我有一个包含大约 500 万行的数据库。我正在尝试为数据库生成 XML 字符串并将它们推送到服务。该服务支持一次获取 1000 条记录,而不是一次执行此操作。目前,这很慢,每 1000 条记录需要 10 秒以上(包括写回数据库和上传到服务)。
我试图让以下代码正常工作,但失败了……我在尝试时遇到了崩溃。有什么想法吗?
var data = <insert LINQ query here>
int take = 1000
int left = data.Count();
Parallel.For(0, left / 1000, i =>
{
data.Skip(i*1000).Take(1000)...
//Generate XML here.
//Write to service here...
//Mark items in database as generated.
});
//Get companies which are still marked as not generated.
//Create XML.
//Write to Service.
我收到一个崩溃,告诉我索引超出范围。如果left 是 500 万,那么循环中的数字应该不超过 5000。如果我再乘以 1000,我应该不会超过 500 万。我不介意它是否工作了一点,然后失败了,但它只是在 SQL 查询之后失败!
【问题讨论】:
-
“索引越界”异常告诉我问题可能不直接出现在您包含的代码中。您能否提供有关数据查询的更多信息,以及您在跳过/采取后做什么?如果可能的话,简化你自己的代码,直到你有一个导致异常的最小示例,然后发布。还要告诉我们错误实际发生在哪一行。
-
看看我的回答 - 你的代码有错误
-
感谢小伙子们的 cmets。当我进行拍摄时发生错误(data.Skip(i * 1000).Take(1000)。似乎@Andrey在我的代码中发现了一个错误......请参阅下面的答案......
标签: c# .net linq parallel-extensions