小编use*_*872的帖子

EF7:术语"添加 - 迁移"不被识别为cmdlet的名称

我将框架版本设置为:project.json中的dnx46.还有以下包:

  "dependencies": {
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "EntityFramework.Core": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final"
  }
Run Code Online (Sandbox Code Playgroud)

但是,当我开始运行enable-migrations命令时,我得到以下内容:

术语"启用 - 迁移"不会被识别为cmdlet的名称

有谁知道我如何在最新的.NET中运行EF迁移?

entity-framework entity-framework-core

13
推荐指数
4
解决办法
2万
查看次数

Parallel.ForEach不使用所有可用的线程池线程

为什么当我运行以下示例时,我是否只让Parallel.ForEach运行的线程数等于我机器上的核心数?我以为Parallel.ForEach给你的线程池线程大约有1000个?

            int threads1;
            int threads2;

            ThreadPool.GetAvailableThreads(out threads1,out threads2);
            var list = Enumerable.Range(1, 200);
            var po = new ParallelOptions
            {
                MaxDegreeOfParallelism = 100
            };

            Parallel.ForEach(list, po, x =>
                {
                    Console.WriteLine("Thread:" + Thread.CurrentThread.ManagedThreadId);
                    Thread.Sleep(1000);
                });
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

.net c# task-parallel-library

7
推荐指数
1
解决办法
8502
查看次数

我指定什么作为ForEachAsync扩展方法的Dop参数?

我最近发现了以下代码,可以有效地运行大量的IO绑定任务(参见链接). http://blogs.msdn.com/b/pfxteam/archive/2012/03/05/10278165.aspx

我的印象如下:

  • 这比使用Parallel.ForEach要好得多,因为工作不受CPU限制.
  • ForEachAsync将帮助排队尽可能多的IO任务(不必将这些任务放在不同的线程上).
  • TPL将"知道"这些是基于IO的任务,而不是启动更多线程,而是使用回调/任务完成源来发回主线程,从而节省线程上下文切换的开销.

我的问题是,由于Parallel.ForEach本身有自己的MaxDegreeOfParallelism,我如何知道在IEnumerable扩展的示例代码中定义dop参数的内容?

例如,如果我要处理1000个项目并且需要为每个项目执行基于IO的SQL-Server数据库调用,我会指定1000作为dop吗?使用Parallel.ForEach,它被用作限制器,以防止过多的线程旋转,这可能会损害性能.但这里它似乎用于分区最小数量的异步任务.我认为至少应该有这样的最大值(最小值是要处理的总项数),因为我想尽可能多地对数据库进行基于IO的调用.

我如何知道如何查看DOP参数?

public static Task ForEachAsync<T>(this IEnumerable<T> source, int dop, Func<T, Task> body) 
{ 
    return Task.WhenAll( 
        from partition in Partitioner.Create(source).GetPartitions(dop) 
        select Task.Run(async delegate { 
            using (partition) 
                while (partition.MoveNext()) 
                    await body(partition.Current); 
        })); 
}
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading task-parallel-library async-await

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

可以更改批准测试的文件名

我想在循环中运行批准测试,以便我可以测试100-1000s的XML文件.我让序列化器输出到一个字符串,然后在Verify()调用中使用它.

但是,我希望能够将verify方法设置为每个测试使用不同的文件名.类和方法名称很好,但是我想用附加名称标记它来描述数据库中正在测试的记录的ID.

这有可能,如果是这样的话怎么样?例如

MyTests.Test_X.ID101.approved.txt

MyTests.Test_X.ID101.received.txt

.net unit-testing approval-tests

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

C# 中最简单的 IDisposable 模式是什么?

如果我有一个仅使用托管资源的类,那么我认为没有必要完全实现 IDisposable 模式。

当然这已经足够了:

    public class ManagedResourceClient : IDisposable
    {
        private ITheManagedResource _myManagedResource = new TheManagedResource()

        public void Dispose()
        {
            if ( _myManagedResource != null )
            {
                _myManagedResource.Dispose();
                _myManagedResource = null;
            }
        } 
    }
Run Code Online (Sandbox Code Playgroud)

我没有看到任何使用的理由:

  • 终结器,因为它仅使用实现 IDisposable 的托管资源
  • “处置”标志,因为这是由空检查处理的
  • 一个虚拟的 Disusing 方法,因为不需要区分 GC 调用和直接调用。

能否确认以上内容正确?

.net c# garbage-collection memory-management

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