System.Threading.Tasks.Parallel.For(0, sum, (i) =>
{
//需要并行运算的方法
)};算法修改的是一个 ref List<int>,通过按钮的按下事件实现结果,点击10次结果正确,10次以后结果就开始变化了,100次以后面目全非....感觉是某一条记录一直在覆盖其他的数据,最后整个表的记录都变成一模一样了。去掉并行,是正确的。哪位大神能解释一下,这是怎么回事?
{
//需要并行运算的方法
)};算法修改的是一个 ref List<int>,通过按钮的按下事件实现结果,点击10次结果正确,10次以后结果就开始变化了,100次以后面目全非....感觉是某一条记录一直在覆盖其他的数据,最后整个表的记录都变成一模一样了。去掉并行,是正确的。哪位大神能解释一下,这是怎么回事?
解决方案 »
- 如何动态叠加button到splitter顶端?
- 关于自定义控件!
- split里面包含特殊字符,结果不对
- 国内没有免费的发短信的接口吗
- sql存储过程中返回的print怎么在C#中调用阿
- DataTable.Select时遇到星号时出错,请高手帮忙解决
- 怎样判断一个事件是否已经定义?
- 非常强大的.NET FrameWork基于WinFrom的SyBase DataWindow.NET开发包,并提供源代码。
- datagrid+树.如果记录多得开始滚动的时候,选择的时候树被datagrid遮挡.如何解决?
- 高分请教:如何将多个只有sheet1的Excel文件合并成一个有多个sheet的Excel文件?
- ACCESS insert语句执行成功了但打开之后却没有该记录怎么回事
- 如何实现qq截图的效果
具体的代码不在我的笔记本上,要等明天。大概的需求是这样的:我是做GIS的,基于Arcengine做二次开发。之前写过一个dll,是用输入点找寻最近的道路(线图层)。输入点坐标,返回最近线的ID。单个点计算,大概耗时5毫秒左右。现在面对的是海量数据,800多万个点。所以我就试着用并行计算
仅凭回忆,大概是这样的:System.Threading.Tasks.Parallel.For(0, sum, (i) =>
{
nearestCal.NearestLine(@"C:\test.shp",pointCollection[i].X,pointCollection[i].Y,ref list,i);
)}; nearestCal.NearestLine是我之前写的dll里的方法改写的
第一个参数是地图文件的路径
第二个和第三个参数是点的X与Y坐标,pointCollection 是一个点集合,类似于结构体。pointCollection[i]就是第i个点。
第四个参数就是一个List<int>
第五个i 的作用是,运算完最近线的ID,把ID写到list的第i行上.我现在都不比较迷茫该怎么实现800W个点的海量计算,该在什么位置lock