小编Dan*_*Tao的帖子

Monitor.TryEnter(object)和Monitor.TryEnter(object,ref bool)之间存在什么重要的区别?

似乎这些代码片段的行为应该相同:

1:Monitor.TryEnter(对象)

if (Monitor.TryEnter(lockObject))
{
    try
    {
        DoSomething();
    }
    finally
    {
        Monitor.Exit(lockObject);
    }
}
Run Code Online (Sandbox Code Playgroud)

2:Monitor.TryEnter(object,ref bool) - 在.NET 4.0中引入

bool lockAcquired;
try
{
    Monitor.TryEnter(lockObject, ref lockAcquired);
    if (lockAcquired)
    {
        DoSomething();
    }
}
finally
{
    if (lockAcquired)
    {
        Monitor.Exit(lockObject);
    }
}
Run Code Online (Sandbox Code Playgroud)

我从MSDN文档中看到有关ref bool参数的重载:

如果因为抛出异常而未执行锁定,则在此方法结束后,为lockTaken参数指定的变量为false.这允许程序在所有情况下确定是否有必要释放锁.

但文档指出,仅使用object参数的重载不会引发除例外之外的任何异常ArgumentNullException.因此,它好像如果一个例外是在代码片段抛出1以上,它只能是因为lockObjectIS null,在这种情况下没有作出锁定(并TryEnter会一直返回false)反正,所以Monitor.Exit就没有必要了电话.

很明显,他们不会毫无理由地引入这种过载.那么该Monitor.TryEnter(object, ref bool)方法的目的是什么?

.net multithreading synchronization monitor .net-4.0

10
推荐指数
1
解决办法
1730
查看次数

我应该在Heroku上将敏感文件存储在哪里?

我可能没有想到这个问题的明显答案.我知道安全凭证等敏感数据最好通过Heroku的CLI使用环境变量存储在像Heroku这样的服务上heroku config:add.但是敏感文件如证书呢?具体来说,我想知道我应该如何处理Apple推送通知(APN)的证书.

我正在自己实施这个问题,因为对这个问题的回答使我相信那里没有很多很好的选择(而且Urban Airship看起来太贵了).从在Rails上的APN上看,我发现他们实际上将证书存储在数据库中.那有意义吗?或者将证书的内容实际存储在环境变量中是否有意义(不确定是否可能)?

configuration certificate heroku environment-variables

10
推荐指数
2
解决办法
2538
查看次数

我应该使用process.nextTick或setImmediate进行异步迭代吗?

我正在开发一个JavaScript库,它提供了可以异步迭代的序列上的map/reduce函数.

GitHub上一个有用的灵魂建议,对于Node.js,我应该process.nextTick尽可能快地进行异步迭代.(该库目前setTimeout在所有环境中都使用,我理解这是不是最理想的.)在Node方面我很缺乏经验,所以我正在阅读这种方法是如何工作的,我不清楚它是否是一个好的选择与否.

根据关于SO的另一个问题的答案,似乎setImmediate在这种情况下使用它可能更有意义,因为它nextTick显然超过了待处理的I/O事件,这对我来说似乎很糟糕.

官方Node v0.10.0公告一些评论似乎证实了这一点:

在v0.10中,nextTick处理程序在每次从C++调用到JavaScript之后立即运行.这意味着,如果您的JavaScript代码调用 process.nextTick,那么一旦代码运行完成,回调将立即触发,但返回事件循环之前.

我是对的,应该异步迭代序列setImmediate吗?或者nextTick在这里会是更好的选择?(在任何一种情况下,一个明确的解释为什么会非常感激.)

javascript performance node.js

10
推荐指数
1
解决办法
2112
查看次数

对委托的引用是否构成对对象的引用(以防止垃圾回收)?

我很难想出一个很好的方法来解释这个问题,所以让我试着通过例子来解释:

假设我有一些界面.为简单起见,我会说界面是IRunnable,它提供了一种方法Run.(这不是真实的;它只是一个例子.)

现在,假设我有一些预先存在的课程,让我们称之为Cheetah,我无法改变.它之前存在IRunnable; 我不能它实现我的接口.但我想使用它就像它实现 - IRunnable可能因为它有一个Run方法,或类似的东西.换句话说,我希望能够拥有期望IRunnable和将使用的代码Cheetah.

好的,所以我总能写出CheetahWrapper一些交易.但幽默我,让我写一些更灵活的东西 - 怎么样RunnableAdapter

我设想类定义是这样的:

public class RunnableAdapter : IRunnable {
    public delegate void RunMethod();

    private RunMethod Runner { get; set; }

    public RunnableAdapter(RunMethod runner) {
        this.Runner = runner;
    }

    public void Run() {
        Runner.Invoke();
    }
}
Run Code Online (Sandbox Code Playgroud)

直截了当,对吧?所以有了这个,我应该可以这样打个电话:

Cheetah c = new Cheetah();
RunnableAdapter ra = new RunnableAdapter(c.Run);
Run Code Online (Sandbox Code Playgroud)

现在,瞧,我有一个实现的对象,IRunner并且在其心中是一个Cheetah …

.net c# delegates garbage-collection

9
推荐指数
1
解决办法
1141
查看次数

有没有人有使用Ruby in Steel的经验?

主要来自.NET背景,我对Visual Studio非常依恋(无论好坏).

不过,我现在正在上学软件工程,我的第一堂课是使用Ruby on Rails在XP(极限编程).大多数情况下,我听说当你在Ruby中开发时,你总是会跳过整个IDE; 而且我完全乐于接受这种可能性.虽然有IDE,但似乎必须至少有一些人仍然发现使用它是值得的.

因为我如此熟悉VS,如果没有人在那里已经用我只是想知道红宝石钢.从网站上看,它看起来确实不错.我完全不知道它对于一般的RoR开发有多么有用或合适,这就是为什么我认为我会把这个问题扔出去.

你使用过Ruby In Steel吗?你对它有什么印象?它如何与其他着名的IDE(如Netbeans)相抗衡?是否值得使用IDE进行RoR开发,或者是一个优秀的文本编辑器?

ruby ide ruby-on-rails ruby-in-steel

9
推荐指数
1
解决办法
2372
查看次数

如何使用反射判断对象的类型是否为Nullable <T>?

如果我有一个Type,是否有一些简单的方法来告诉它使用Reflection代表一个可以为空的值类型?理想情况下,比以下更清洁(也更正确):

static bool IsNullable(Type type)
{
    return type.IsValueType && type.Name.StartsWith("Nullable");
}
Run Code Online (Sandbox Code Playgroud)

.net reflection nullable

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

为什么是List(T).清除O(N)?

根据MSDN文档中的List<T>.Clear方法:

该方法是O(n)操作,其中n是Count.

为什么O(n)?我问,因为我认为List<T>只需在T[]内部分配一个新数组即可完成清除.没有其他类可以引用这个数组,所以我没有看到这种方法的危害.

现在,也许这是一个愚蠢的问题......正在分配一个T[]数组本身O(n)?出于某种原因,我不会这么想; 但也许是(我现在缺少CS学位吗?).如果是这样,我想这可以解释它,因为根据上面引用的相同文档,列表的容量保持不变,这意味着需要构建一个相同大小的数组.

(然后,这似乎不是正确的解释,因为文档应该说"其中n是容量 " - 而不是 Count*).

我只是怀疑这个方法,而不是分配一个新的数组,将当前的所有元素归零; 而且我很想知道为什么会这样.

*Hans Passant在对LukeH的回答中指出,文档是正确的.Clear只将已设置的元素清零List<T>; 它不需要将所有元素"重新归零".

.net performance big-o list clear

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

c#4.0:int一个真正的对象子类型?协方差,可数和值类型

我想知道为什么IEnumerable<int>不能分配到IEnumerable<object>.毕竟IEnumerable是支持协方差的少数接口之一......

  • 子类型关系和协方差的东西适用于引用类型
  • int 似乎是一个适当的亚型 object

两种功能的组合不起作用......

class A
{
}

class B : A
{
}

class Program
{
    static void Main(string[] args)
    {
        bool b;
        b = typeof(IEnumerable<A>).IsAssignableFrom(typeof(List<B>));
        Console.WriteLine("ienumerable of ref types is covariant: " + b); //true

        b = typeof(IEnumerable<object>).IsAssignableFrom(typeof(List<int>));
        Console.WriteLine("ienumerable of value tpyes is covariant: " + b); //false

        b = typeof(object).IsAssignableFrom(typeof(int));
        Console.WriteLine("int is a subtype of object: " + b); //true
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!塞巴斯蒂安

c# ienumerable covariance value-type

9
推荐指数
3
解决办法
1298
查看次数

iPhone上不支持onbeforeunload事件吗?

所以,我在jQuery Mobile应用程序中有一个方便的功能,让用户知道他/她是否正在离开页面,因为这将触发注销.以简化形式:

$(window).bind('beforeunload', function() {
  return "Navigating away from this page will log you off. Are you sure you want to continue?";
});

$(window).unload(function() {
  logoff();
});
Run Code Online (Sandbox Code Playgroud)

这在我的笔记本电脑上的Safari和Chrome中都非常有用.但是,它似乎不适用于iPhone模拟器.

移动浏览器是否包含在iOS中(我知道它是Safari,但可能是不同的版本)根本不支持该beforeunload事件?这对于移动设备(特别是Android)来说是否正常?

iphone mobile jquery onbeforeunload onunload

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

我怎么期望不发出HTTP请求?

角的$ httpBackend服务可以让你期望与HTTP请求expectGET,expectPOST等(或只是expect).

我怎么写一个测试说"控制器不应该向这个端点发出请求(在这些条件下)"?

我想的是:

$httpBackend.when('/forbidden/endpoint').respond(function() {
  throw Error("Shouldn't be making a request to /forbidden/endpoint!");
});
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎有些苛刻,但如果这是正常的做事方式,我对它很好.(但我对此表示怀疑.)

angularjs httpbackend

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