我只是想知道dot.net 4中的新Task类是创建后台线程还是前台线程?
通常我会在Thread上设置"IsBackground",但是Task上没有这样的属性.
我无法在MSDN上找到任何这方面的文档:-(
我想知道在内部包装代表之间究竟有什么区别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#中构建一个多线程缓存,它将包含一个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)
基本上,它归结为是否为汽车分配新的参考是原子的还是不是我想的.
如果不是,我显然必须为我的汽车使用私人领域,并锁定获取和设置.
我遇到了一个问题,我根本无法找到一个好的解决办法.
我想要这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) 我开始使用代码合同,虽然Contract.Requires非常简单,但我很难看到Ensures实际上做了什么.
我试过创建一个这样的简单方法:
static void Main()
{
DoSomething();
}
private static void DoSomething()
{
Contract.Ensures(false, "wrong");
Console.WriteLine("Something");
}
Run Code Online (Sandbox Code Playgroud)
我从来没有看到消息"错误",也没有抛出异常或其他任何东西.
那它实际上做了什么?
我正在构建一个简单的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)
会有什么不同吗?
我们在C#中使用一个简单的File.Copy将数据库备份移动到额外的位置.
但是在某些服务器上,这会导致SQL服务器停止工作.这些服务器的内存非常有限,因此它们经常将数据分页到硬盘驱动器.
虽然我们应该购买更多内存,但这不会发生很长时间: - /
所以我想知道我是否可以某种方式限制File.Copy操作的速度?(从而为SQL服务器提供了访问硬盘的空间)
我可以使用两个流的"旧学校"方法,通过缓冲区读取和写入,并且在读取之间只睡5毫秒左右.但我真的更喜欢更整洁的解决方案,如果有这样的解决方案.
我有一些多线程代码,我想增加一点的性能,所以我想知道我是否可以摆脱锁.
我有一个现场成员:
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,但是我再次希望赋值有点线程安全(或者它已经更改了引用)
我还是MVC 3的新手,我很难为我的应用程序创建一个漂亮的错误页面.
我注意到共享的Error.cshtml视图是自动生成的,它用于什么以及如何使用?
实现简单的单个错误页面的任何链接都将是辉煌的:-)