小编Ste*_*fen的帖子

任务是作为后台线程创建的吗?

我只是想知道dot.net 4中的新Task类是创建后台线程还是前台线程?

通常我会在Thread上设置"IsBackground",但是Task上没有这样的属性.

我无法在MSDN上找到任何这方面的文档:-(

c#-4.0

75
推荐指数
3
解决办法
3万
查看次数

Expression类的目的是什么?

我想知道在内部包装代表之间究竟有什么区别Expression<>

我看到Expression<Foo>LinQ使用了很多,但到目前为止,我还没有找到任何解释它之间差异的文章,只是使用了一个委托.

例如

Func<int, bool> Is42 = (value) => value == 42;
Run Code Online (Sandbox Code Playgroud)

Expression<Func<int, bool>> Is42 = (value) => value == 42;
Run Code Online (Sandbox Code Playgroud)

c# lambda expression-trees

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

在SQL Server中使用外键是否有严重的性能损失?

我正在尽我所能说服我的老板让我们在我们的数据库中使用外键 - 到目前为止没有运气.

他声称这需要花费大量的性能,并说我们现在只需要有工作来清理无效的引用.

显然这在实践中不起作用,并且数据库充斥着无效的引用.

有没有人知道比较,基准或类似的证明使用外键没有显着的性能影响?(我希望能说服他)

sql sql-server database-design foreign-keys

37
推荐指数
3
解决办法
2万
查看次数

参考分配线程安全吗?

我正在C#中构建一个多线程缓存,它将包含一个Car对象列表:

public static IList<Car> Cars {get; private set;}
Run Code Online (Sandbox Code Playgroud)

我想知道在没有锁定的情况下更改线程中的引用是否安全?

例如

private static void Loop()
{
  while (true)
  {
    Cars = GetFreshListFromServer();
    Thread.Sleep(SomeInterval);
  }
}
Run Code Online (Sandbox Code Playgroud)

基本上,它归结为是否为汽车分配新的参考是原子的还是不是我想的.

如果不是,我显然必须为我的汽车使用私人领域,并锁定获取和设置.

c# thread-safety

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

方法重载只有通用约束才有区别

我遇到了一个问题,我根本无法找到一个好的解决办法.

我想要这3个重载:

public IList<T> GetList<T>(string query) where T: string
public IList<T> GetList<T>(string query) where T: SomeClass
public IList<T> GetList<T>(string query) where T: struct
Run Code Online (Sandbox Code Playgroud)

显然第一个约束甚至不能单独编译,所以这是我的第一个问题.(我意识到我可以让它成为IList但我想要三个相同的语法)

无论如何,所有这些的原因,是这些方法是围绕对数据库执行SQL查询的包装器的一部分 - 我希望能够将结果作为字符串列表返回(如果有人选择varchar列),列表valuetypes(int,float,whatever)或类列表(这些类表示表,因此包含多个列)

我希望这部分有点可以理解:-)

无论如何,我的大问题显然是我无法进行这些重载,因为它们使用相同的名称和参数列表.

我也不能将它们合并到同一个方法中,因为我需要在该实现中调用SomeClass上的方法,所以除非我想做一些重型类型转换,或者更糟糕的是反射 - 我需要这个约束.

我意识到我正在努力做的事情是不可能的,所以我正在寻找的是一种很好的方法,它会模仿我的意图.

如果其中一些有点不清楚,请随意问:-)

编辑:

这是我当前的"where T:SomeClass"版本的代码.我正在尝试添加对当前代码的字符串/值类型的支持,所以也许我的初始方法是完全错误的 - 任何想法基本上都是受欢迎的:-)

public IList<TValue> GetList<TValue>(string query) where TValue : DbTable, new()
{
    DataSet dataSet = GetDataSet(query);
    IList<TValue> result = new List<TValue>();

    if (dataSet.Tables.Count > 0)
    {
        foreach (DataRow row in dataSet.Tables[0].Rows)
        {
            TValue col = new TValue();
            col.Fill(row);
            result.Add(col);
        }
    }

    return result; …
Run Code Online (Sandbox Code Playgroud)

c# generics

22
推荐指数
1
解决办法
2551
查看次数

Contract.Ensures如何运作?

我开始使用代码合同,虽然Contract.Requires非常简单,但我很难看到Ensures实际上做了什么.

我试过创建一个这样的简单方法:

static void Main()
{
    DoSomething();
}

private static void DoSomething() 
{
    Contract.Ensures(false, "wrong");
    Console.WriteLine("Something");
}
Run Code Online (Sandbox Code Playgroud)

我从来没有看到消息"错误",也没有抛出异常或其他任何东西.

那它实际上做了什么?

c# code-contracts

19
推荐指数
1
解决办法
7384
查看次数

C#:AsParallel - 订单有关系吗?

我正在构建一个简单的LinQ-to-object查询,我想并行化,但是我想知道语句的顺序是否重要?

例如

IList<RepeaterItem> items;

var result = items
        .Select(item => item.FindControl("somecontrol"))
        .Where(ctrl => SomeCheck(ctrl))
        .AsParallel();
Run Code Online (Sandbox Code Playgroud)

var result = items
        .AsParallel()
        .Select(item => item.FindControl("somecontrol"))
        .Where(ctrl => SomeCheck(ctrl));
Run Code Online (Sandbox Code Playgroud)

会有什么不同吗?

plinq c#-4.0

15
推荐指数
1
解决办法
2863
查看次数

限制File.Copy的速度

我们在C#中使用一个简单的File.Copy将数据库备份移动到额外的位置.

但是在某些服务器上,这会导致SQL服务器停止工作.这些服务器的内存非常有限,因此它们经常将数据分页到硬盘驱动器.

虽然我们应该购买更多内存,但这不会发生很长时间: - /

所以我想知道我是否可以某种方式限制File.Copy操作的速度?(从而为SQL服务器提供了访问硬盘的空间)

我可以使用两个流的"旧学校"方法,通过缓冲区读取和写入,并且在读取之间只睡5毫秒左右.但我真的更喜欢更整洁的解决方案,如果有这样的解决方案.

.net c# copy file

12
推荐指数
1
解决办法
2681
查看次数

.NET线程 - 分配需要锁定

我有一些多线程代码,我想增加一点的性能,所以我想知道我是否可以摆脱锁.

我有一个现场成员:

private IList<ServerStatus> status;
Run Code Online (Sandbox Code Playgroud)

它在这样的线程中更新:

status = GetUpdatedStatus();
Run Code Online (Sandbox Code Playgroud)

它在另一个线程中使用,如下所示:

var currentStatus = status;
Run Code Online (Sandbox Code Playgroud)

所以问题是,如果没有锁定两个赋值语句,上面会产生任何问题吗?

我想我能看到的唯一情况是currentStatus为null,但是我再次希望赋值有点线程安全(或者它已经更改了引用)

.net c# multithreading locking

12
推荐指数
2
解决办法
2347
查看次数

ASP.Net MVC 3中的共享错误视图,它的用途是什么?

我还是MVC 3的新手,我很难为我的应用程序创建一个漂亮的错误页面.

我注意到共享的Error.cshtml视图是自动生成的,它用于什么以及如何使用?

实现简单的单个错误页面的任何链接都将是辉煌的:-)

c# asp.net-mvc-3

12
推荐指数
1
解决办法
8498
查看次数