小编Tom*_*lek的帖子

在C#中并行运行三个方法的最简单方法

我有三种方法可以做一些数字运算,如下所示

results.LeftFront.CalcAi();  
results.RightFront.CalcAi();  
results.RearSuspension.CalcAi(geom, vehDef.Geometry.LTa.TaStiffness, vehDef.Geometry.RTa.TaStiffness);
Run Code Online (Sandbox Code Playgroud)

每个函数彼此独立,并且可以并行计算而没有死锁.
在没有包含方法完成之前,并行计算这些内容的最简单方法是什么?

c# parallel-processing task-parallel-library

66
推荐指数
2
解决办法
8万
查看次数

接口与单独的项目中的类实现分开?

我们在一个中型项目(超过6个月的3个开发人员)上工作,需要做出以下决定:我们希望将接口与具体实现分开.第一种是将接口存储在单独的文件中.

我们想进一步分离数据:我们希望在一个.CS文件中添加一个带有接口的项目(CSPROJ)以及带有帮助类的另一个.CS文件(比如此接口中使用的一些公共类,一些枚举等).然后,我们想要另一个项目(CSPROJ),它具有工厂模式,具体的接口实现和其他"工作者"类.

任何想要创建实现此接口的对象的类都必须包含第一个包含接口和公共类的项目,而不是实现本身.

这个解决方案有一个很大的缺点:它将程序集的数量乘以2,因为每个"普通"项目都有一个带有interace的项目和一个带有实现的项目.

你会推荐什么?您认为将所有接口放在一个单独的项目中而不是在其自己的项目中的一个接口上是一个好主意吗?

c# interface

44
推荐指数
5
解决办法
2万
查看次数

如何使用T-SQL将表中的记录转换为xml格式?

我有一个简单的表,并希望将其内容存储到硬盘上的xml中.整个表应该有一个根元素,每个表行一个元素,每个表列一个子元素.

我有什么可能吗?

非常感谢Tomas

xml t-sql sql-server

22
推荐指数
2
解决办法
9万
查看次数

在某些情况下,OptimisticConcurrencyException在实体框架中不起作用

更新(2010-12-21):根据我一直在做的测试完全重写了这个问题.此外,这曾经是一个POCO特定的问题,但事实证明我的问题不一定是POCO特定的.

我正在使用Entity Framework,我的数据库表中有一个时间戳列,应该用于跟踪乐观并发的变化.我已将实体设计器中此属性的并发模式设置为"已修复",并且我得到的结果不一致.以下是几个简化的场景,它们演示了并发检查在一个场景中工作但在另一个场景中不起作用.

成功抛出OptimisticConcurrencyException:

如果我附加一个断开连接的实体,那么如果存在时间戳冲突,SaveChanges将抛出一个OptimisticConcurrencyException:

    [HttpPost]
    public ActionResult Index(Person person) {
        _context.People.Attach(person);
        var state = _context.ObjectStateManager.GetObjectStateEntry(person);
        state.ChangeState(System.Data.EntityState.Modified);
        _context.SaveChanges();
        return RedirectToAction("Index");
    }
Run Code Online (Sandbox Code Playgroud)

不抛出OptimisticConcurrencyException:

另一方面,如果我从数据库中检索我的实体的新副本并对某些字段进行部分更新,然后调用SaveChanges(),那么即使存在时间戳冲突,我也不会得到OptimisticConcurrencyException :

    [HttpPost]
    public ActionResult Index(Person person) {
        var currentPerson = _context.People.Where(x => x.Id == person.Id).First();
        currentPerson.Name = person.Name;

        // currentPerson.VerColm == [0,0,0,0,0,0,15,167]
        // person.VerColm == [0,0,0,0,0,0,15,166]
        currentPerson.VerColm = person.VerColm;

        // in POCO, currentPerson.VerColm == [0,0,0,0,0,0,15,166]
        // in non-POCO, currentPerson.VerColm doesn't change and is still [0,0,0,0,0,0,15,167]
        _context.SaveChanges();
        return RedirectToAction("Index");
    }
Run Code Online (Sandbox Code Playgroud)

基于SQL Profiler,看起来Entity Framework忽略了新的VerColm(这是时间戳属性),而是使用最初加载的VerColm.因此,它永远不会抛出OptimisticConcurrencyException.


更新:根据Jan的要求添加其他信息:

请注意,我还在上面的代码中添加了注释,以便与我在执行此示例时在控制器操作中看到的内容一致.

这是更新前我的DataBase中VerColm的值:0x0000000000000FA7

以下是SQL Profiler在执行更新时显示的内容: …

c# asp.net concurrency entity-framework poco

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

在.NET 4.0应用程序中存储非公共配置数据的最佳方法是什么

我的应用程序使用标准的app.config来存储公共配置数据.但是,仍然有一些其他数据不公开,但它们仍然必须始终可访问,持久性,可以从应用程序之外更改,以及在出现某些问题时手动更改.

例如,假设应用程序将某些许可信息存储在一个不能公开可用的文件中.但是,管理员必须能够使用记事本或类似程序(没有任何特殊编辑器)编辑此文件,因此加密不在游戏中.

你会使用独立存储吗?你有其他建议吗?由于应用程序不使用任何数据库,因此请不要考虑使用数据库作为选项进行存储.

所以问题是如何存储应用程序数据,以便不像app.config那样容易手动修改,但仍然可以轻松地为高级用户编辑.

app-config isolatedstorage c#-4.0

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

Moq是一种无效方法

我试图弄清楚这个Mock(使用Moq框架)的东西是如何起作用的,但是我对返回void的方法感到有些困惑.

原始对象具有以下方法/属性:

void Add(Person entity);
void Save();
IQueryable<Person> Persons;
Run Code Online (Sandbox Code Playgroud)

Add方法调用InsertOnSubmit(它是Linq to sql)和Save方法调用Context.SubmitChanges().Person的属性返回Table<News>对象.

我不知道如何嘲笑这些方法,因为我显然无法使用Returns().

或者我的设计是否意味着我实际上无法正确地模拟对象?

c# unit-testing moq mocking

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

如何将C#中的时区信息转换为Java中的时区信息?

我有一个由C#后端和Java前端组成的系统.的C#后端与其他系统和一些移动设备进行通信.

C#方面,我的任务是识别来自移动设备的时间戳的时区并创建相应的TimeZoneInfo对象.这没有任何问题.

Java方面,我必须显示时区信息以及移动设备发送的数据.我正在使用TimeZone该类在我的域对象中存储时区信息.

现在的问题是我如何创建一个Java的TimeZon,其与对应ê对象C#TimeZoneInfo对象?AFAIK时区没有任何唯一ID.此外,名称也不同(例如在C#中:" Central Europe Standard Time",在Java中 " Central Europe Time").甚至C#和Java中的时区数量都不相同!

c# java timezone

5
推荐指数
2
解决办法
4612
查看次数

使用Thread.Sleep的Task.Factory.StartNew等待x秒

我可以做这样的事情,等待,例如5秒,然后继续使用其他方法,而不冻结我的UI?

System.Threading.Tasks.Task.Factory.StartNew(() =>
{
    System.Threading.Thread.Sleep(5000);
    // Code to do some method
});
Run Code Online (Sandbox Code Playgroud)

c# multithreading task-parallel-library

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