小编Dim*_*tri的帖子

在数据流网络中使用BufferBlock <T>的好处

我想知道使用链接到一个或多个ActionBlocks的BufferBlock是否有好处,除了限制(使用BoundedCapacity),而不是直接发布到ActionBlock(只要不需要限制).

.net c# task-parallel-library tpl-dataflow

14
推荐指数
3
解决办法
9905
查看次数

Windows上的iOS和Android开发

我面临两难困境:我在C#中拥有扎实的ASP.NET开发经验,并希望开始移动开发.我已经做过研究,并且知道在Windows上获得iOS开发环境有一些黑客攻击,最近Apple取消了对第三方开发应用程序的禁令后,Adobe Flash CS5可用于打包iOS应用程序.我确实有一些Flash和AS2的经验.所以我的问题是:我应该使用适用于iOS的Flash CS5和适用于Android的MonoDroid,还是应该使用Mac并学习iOS的Objective C并学习Android的Java?什么是最实用的解决方案?

先感谢您

编辑:最后,在针对Android SDK和Android的Mono中尝试了Eclipse中的Java开发之后,我认为最好在本机环境中编写Android应用程序.Eclipse FTW!至于iOS,我认为最好使用原生Mac工具和Objective C.

android xamarin.ios xamarin.android flash-cs5 ios

6
推荐指数
1
解决办法
1万
查看次数

在并行数据处理中使用什么类型的队列 - C# - .NET 4

场景:接收数据并将其写入带有时间戳的数据库.我需要按照基于时间戳接收的顺序处理原始数据,并将其写回数据库,不同的表,再次根据时间戳维护订单.

我提出了以下设计:创建了两个队列,一个用于存储来自数据库的原始数据,另一个用于存储已处理的数据,然后再写回数据库.我有两个线程,一个读取初始队列,另一个读取Result队列.在我之间生成多个线程来处理来自Initial队列的数据并将其写入Result队列.

我已经尝试过SortedList(手动锁定)和BlockingCollection.我使用了两种并行处理方法:Parallel.For(ForEach)和TaskFactory.Task.StartNew.

基于若干因素,每个数据单元可能花费可变的时间来处理.一个线程仍然可以处理第一个数据点,而其他线程每个处理三个或四个数据点,搞乱了时间戳顺序.

我最近发现了OrderingPartitioner,我认为它可以解决问题,但是按照MSDN的例子我可以看到,它也没有对基础集合进行排序.可能是我需要实现自定义分区器来订购我的复杂数据类型集合?或者可能有更好的方法来解决问题?

任何有关讨论类似问题的文章的建议和/或链接都受到高度赞赏.

c# parallel-processing multithreading c#-4.0

6
推荐指数
1
解决办法
1469
查看次数

SQL中的地理空间数据

我最近一直在试验地理数据类型并且喜欢它.但是我无法决定是否应该从我当前的模式转换,将两个单独的数字(9,5)字段中的纬度和经度存储到地理类型.我已经计算了两种类型的大小,Lat/Long表示一个点的方式是单个点28个字节,而地理类型是26个.空间不是很大的增益,但是在执行地理空间操作(交叉,距离测量等)方面有很大改进.当前使用笨拙的存储过程和标量函数处理的.我想知道的是指数.地理数据类型是否需要更多空间来索引数据?我有一种感觉,即使存储在列中的实际数据较少,我认为地理空间索引的工作方式最终会为它们带来更大的空间分配.

PS作为旁注,似乎SQL Server 2008(不是R2)不会自动搜索地理空间索引,除非明确告知使用WITH(INDEX())子句

sql-server geospatial sqlgeography

6
推荐指数
1
解决办法
661
查看次数

将动态创建的ActionBlocks链接到BufferBlock

我不确定这是否可能,但如果是的话,我可能做得不对.假设我有一个链接到许多消费者的共享缓冲区(ActionBlocks).每个使用者应该使用满足用于将其链接到缓冲区的谓词的数据.例如,ActionBlock1应该使用满足的数字x => x % 5 == 0,ActionBlock2应该只消耗x => x % 5 == 1等.

这是我得到的:

private static ITargetBlock<int> BuildPipeline(int NumProductionLines)
{
    var productionQueue = new BufferBlock<int>();

    for (int i = 0; i < NumProductionLines; i++)
    {
        ActionBlock<int> productionLine = new ActionBlock<int>(num => Console.WriteLine("Processed by line {0}: {1}", i + 1, num));

        productionQueue.LinkTo(productionLine, x => x % NumProductionLines == i);
    }

    return productionQueue;
}
Run Code Online (Sandbox Code Playgroud)

然后我打电话给:

Random rnd = new Random();

ITargetBlock<int> temp = BuildPipeline(5);

while (true)
{
    temp.Post(rnd.Next(255)); …
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library tpl-dataflow

5
推荐指数
1
解决办法
1912
查看次数

字典与两把钥匙

通过字典中的两个键索引值的最佳方法是什么.例如:让学生使用唯一的Id(整数)和用户名(字符串)创建一个字典,其中包含由Id和username索引的学生类型的对象.然后在检索上使用Id或用户名.或者可能是词典不是很好的匹配?PS我知道元组,但没有看到如何在这种情况下使用它们.

编辑:作为使用两个键的替代方法,我可以创建一个由唯一分隔符分隔的id和username的字符串表示,然后使用正则表达式匹配键?!例:"1625 | user1"

c# dictionary

4
推荐指数
1
解决办法
2076
查看次数

TaskFactory.Tasks中BlockingCollection.GetConsumingEnumerable()集合的Parallel.ForEach和foreach循环

我已经尝试了这两个循环,并注意到即使Task的Action委托中的常规foreach循环应该并行执行,它也不会并行处理元素.但是,如果我用Parallel.ForEach替换它,我看到数据正在跨多个线程并行处理.

代码1:

Task loadingTask1 = Factory.StartNew(() =>
        {
            foreach (MyOneClass dg in Queue.GetConsumingEnumerable())
            {

                MyOtherClass vl = new MyOtherClass();
                vl.Id = dg.Id;
                vl.PerformTimeConsumingAction();

                OutputQueue.Add(vl);
            }
        });
Run Code Online (Sandbox Code Playgroud)

代码2:

Task loadingTask2 = Factory.StartNew(() =>
        {
            Parallel.ForEach(Queue.GetConsumingEnumerable(), (dg) =>
            {

                MyOtherClass vl = new MyOtherClass();
                vl.Id = dg.Id;
                vl.PerformTimeConsumingAction();

                OutputQueue.Add(vl);
            });
        });
Run Code Online (Sandbox Code Playgroud)

在每次迭代时使用Console.Write语句运行的代码1似乎等待上一个循环完成,直到它抓住下一个循环,但代码2确实并行处理多个元素.

我是否正确理解Task.Action中的常规foreach?我认为.NET将启动尽可能多的任务线程作为加载保证,并且每个迭代的foreach将被并行处理.

我也尝试将PLINQ结果传递给上述代码和观察者相同的行为:常规foreach似乎等待上一次迭代完成以启动下一个代码,即使我已经使用了.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism)指令.

任何见解都将受到高度赞赏.我知道OrderingPartitioner类,可能会尝试使用它

c# parallel-processing multithreading task-parallel-library

3
推荐指数
1
解决办法
3001
查看次数

TPL数据流和异步方法调用

我试图更好地理解并行处理的整个概念并设置测试用例.在使用测试之后,我发现使用Dataflow ActionBlock(或TransformBlock)中的异步方法调用不会对性能产生积极影响,它只会使代码复杂化.我是否正确地假设如果我使用Dataflow Blocks,其中的代码不必是异步的,Dataflow将使其本身异步.或者我错过了这一点?

.net c# task-parallel-library async-await tpl-dataflow

2
推荐指数
1
解决办法
3241
查看次数