小编Rob*_*sor的帖子

旋锁,它们有用吗?

您经常在代码中发现自己使用自旋锁的频率是多少?遇到使用繁忙循环实际上优于锁的使用情况的情况有多常见?
就个人而言,当我编写某种需要线程安全的代码时,我倾向于使用不同的同步原语对其进行基准测试,并且就其而言,使用锁似乎比使用自旋锁具有更好的性能.无论我实际持有锁的时间有多少,使用自旋锁时我收到的争用量远大于使用锁时获得的数量(当然,我在多处理器机器上运行我的测试).

我意识到它更有可能在"低级"代码中遇到一个螺旋锁,但我很想知道你是否发现它甚至可以用于更高级的编程?

c# c++ multithreading locking spinlock

33
推荐指数
7
解决办法
2万
查看次数

为什么Java没有方法委托?

Sun的Java gurunaths(nathaनाथ= sanskrit for deity-master-protector)应该屈服于接受代表的必要性并将其草拟为Java规范.

在C#中,我可以将一个方法作为委托作为委托引用,而不需要因为我需要在Java中传递一个方法来创建一个类.

是什么原因导致它不必要(除了引用笨拙的使用一个全新的类为此目的)或不利的是Sun决定不用Java?创建类或匿名实现接口有哪些优势超过代理?我什么都想不到,可以吗?

c# java delegates

12
推荐指数
3
解决办法
2878
查看次数

LINQ to SQL - 跟踪新/脏对象

有没有办法确定LINQ对象是否尚未插入数据库(新)或自上次更新(脏)后是否已更改?我计划将我的UI绑定到LINQ对象(使用WPF),并且需要它根据对象是否已经在数据库中而表现不同.

MyDataContext context = new MyDataContext();
MyObject obj;
if (new Random().NextDouble() > .5)
    obj = new MyObject();
else
    obj = context.MyObjects.First();
// How can I distinguish these two cases?
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一简单的解决方案是将新记录的主键设置为负值(我的PK是一个标识字段,因此将设置为正整数INSERT).这仅适用于检测新记录.它还需要身份PK,并且需要控制创建新对象的代码.

有一个更好的方法吗?似乎LINQ必须在内部跟踪这些对象的状态,以便它可以知道该做什么context.SubmitChanges().有没有办法访问"对象状态"?

澄清 显然我的初步问题令人困惑.我不是在寻找插入或更新记录的方法.我正在寻找一种方法,给定任何LINQ对象,以确定该对象是否未插入(新)或自上次更新(脏)后是否已更改.

c# linq linq-to-sql

8
推荐指数
1
解决办法
3366
查看次数

将枚举设置为其默认值

我相信这是相当微不足道的,但我无法做到.

public static string DoSomething(this Enum value)
 {
     if (!Enum.IsDefined(value.GetType(), value))
     {
         // not a valid value, assume default value
         value = default(value.GetType()); 
     }

     // ... do some other stuff
 }
Run Code Online (Sandbox Code Playgroud)

该行value = default(value.GetType());无法编译,但希望您能看到我正在尝试的内容.我需要将Enum param设置为它自己类型的默认值.

c# enums value-type default-value

7
推荐指数
2
解决办法
3534
查看次数

如何检测系统时间是否已更改?(来自.net)

我正在使用DateTime.UtcNow来测量我的软件中的时间,并且需要能够判断"动作a"是否在"动作b"后不到10秒发生

但是,如果系统时间发生变化怎么办?那么我该如何检测系统时间是否改变了?

我不想使用秒表,因为我们需要在具有多个CPU的服务器上运行,请参阅http://kristofverbiest.blogspot.com/2008/10/beware-of-stopwatch.html

我还需要处理暂停和重新启动的虚拟机,因此"滴答计数"对我来说不太可能有用.

.net windows time

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

构建Linq-to-Events拖放代码的最佳方法是什么?

我正在尝试处理拖放交互,包括鼠标按下,鼠标移动和鼠标移动.

以下是我的解决方案的简化版本:

  • 在鼠标按下时,创建一个椭圆并将其添加到画布
  • 在鼠标移动时,重新定位椭圆以跟随鼠标
  • 在鼠标向上时,更改画布的颜色,以便明显拖动哪一个.

    var mouseDown = Observable.FromEvent<MouseButtonEventArgs>(canvas, "MouseLeftButtonDown");
    var mouseUp = Observable.FromEvent<MouseButtonEventArgs>(canvas, "MouseLeftButtonUp");
    var mouseMove = Observable.FromEvent<MouseEventArgs>(canvas, "MouseMove");
    
    Ellipse ellipse = null;
    
    var q = from start in mouseDown.Do(x =>
                {
                    // handle mousedown by creating a red ellipse, 
                    // adding it to the canvas at the right position
                    ellipse = new Ellipse() { Width = 10, Height = 10, Fill = Brushes.Red };
                    Point position = x.EventArgs.GetPosition(canvas);
                    Canvas.SetLeft(ellipse, position.X);
                    Canvas.SetTop(ellipse, position.Y);
                    canvas.Children.Add(ellipse);
                })
            from delta in mouseMove.Until(mouseUp.Do(x …
    Run Code Online (Sandbox Code Playgroud)

.net drag-and-drop system.reactive c#-4.0

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

我应该用文档数据库重建我的PHP网站以提高性能吗?

我们有一个用PHP开发的MySQL网站,当流量增加时有时会遇到问题.我们几乎以各种方式优化了网站以处理更多请求,但在高峰时段仍然面临问题.

我的一位朋友建议使用HBase/MongoDB作为后端重建网站以提高性能.他还建议,如果我们重建它,我们可以轻松转向云服务.但我们需要学习整个事物并重新开发它.

这样做更好吗?

php mysql hbase mongodb

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

如何在datagridview中捕获删除行(来自键盘)?

背景 我有一个绑定到datagridview的自定义集合

this.datagridview.DataSource = mycollection

我在用户界面上有一个删除按钮.用户可以单击删除按钮删除所选的DX目录.

有些委托不能删除所以我启用和禁用"删除按钮".

如果用户用户通过单击删除按钮删除条目,它可以正常工作.

问题是 :

当用户按下"键盘"中的"删除"按钮时

如何捕获键盘"删除"按钮..当我按下键盘上的删除按钮时:

--it从数据网格视图中删除选定的行. - 当用户单击"保存"时,它也会将其保存到Xml中.

为了纠正这个问题,我已经处理了数据网格视图的_RowRemoved事件..但仍然没有帮助

请帮忙

.net c# datagridview winforms

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

C#:XPath选择包含子字符串属性的节点?

我可以使用XPath选择其代码包含UK的国家/地区节点吗?

<country-list>
  <Country code="TW,UK,MY" />
  <Country code="US,CA,MX" />
  <Country code="IN,PR,VI,IR" />
  <Country code="Others" /> 
</country-list>
Run Code Online (Sandbox Code Playgroud)

谢谢.

c# asp.net xpath c#-2.0

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

C#:用于将一个复杂对象映射到另一个对象的库

我从服务器获取一个复杂的对象 - 我们称之为ServerDTO.我想将它映射到客户端对象 - 让我们称之为ClientDTO.

假设ServerDTO和ClientDTO内部具有相同的结构.

我想将ServerDTO对象映射到ClientDTO对象.这样非常简单的映射:

ServerDTO sd = server.Result;
ClientDTO cd = new ClientDTO();
cd.Property1 = sd.Property1;
cd.JahRas = sd. JahRas;
Run Code Online (Sandbox Code Playgroud)

等等...

到现在为止还挺好.

现在我的问题是这个映射是否可以在一些抽象层中完成,它可以处理所有对象的所有映射,无论它们是什么类型或内部?

所以,当我想要地图时,我会去:

ClientDTO cd = Mapper.Map(sourceServerDTO, typeOf(ClientDTO)); 
Run Code Online (Sandbox Code Playgroud)

c#

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