在阅读本文后,我认为最好使用Monitor/Lock进行线程同步,因为它不使用本机资源
具体报价(来自文章第5页):
Monitor.Wait/Pulse不是在一个线程中等待某事发生并且告诉该线程它在另一个线程中发生的唯一方法.Win32程序员长期以来一直在使用各种其他机制,这些机制由AutoResetEvent,ManualResetEvent和Mutex类公开,所有这些都派生自WaitHandle.所有这些类都在System.Threading命名空间中.(Win32 Semaphore机制在.NET 1.1中没有托管包装.它存在于.NET 2.0中,但是如果你需要在那之前使用它,你可以使用P/Invoke自己包装它,或者编写你自己的计数信号量类.)
有些人可能会惊讶地发现使用这些类可能比使用各种Monitor方法慢得多.我相信这是因为将托管代码"输出"到本机Win32调用并再次返回"in"与Monitor提供的完全托管视图相比是昂贵的.读者还解释了监视器是在用户模式下实现的,而使用等待句柄需要切换到内核模式,这是相当昂贵的.
但是,自从发现SO并阅读一些问题/答案后,我开始怀疑我对何时使用每个问题的理解.似乎许多人建议在Monitor.Wait/Pulse可以使用的情况下使用Auto/ManualResetEvent.任何人都可以向我解释基于WaitHandle的同步应该在Monitor上使用吗?
谢谢
我一直在尝试使用Rhino Mocks对我的.Net Compact Framework应用程序进行单元测试,并遇到了问题.我可以使用构建的Rhino Mocks进行基本单元测试,但每次运行包含Rhino Mocks代码的测试时,测试都会失败,因为它无法找到Rhino Mocks程序集.
System.TypeLoadException:无法从程序集'Rhino.Mocks'加载类型'Rhino.Mocks.MockRepository'...
我已经将rhino mocks dll复制到设备上的各个位置(我的app文件夹和创建的SmartDeviceTest文件夹),但它似乎仍然无法找到它.
有没有人使用紧凑框架的犀牛嘲笑,可以指出我正确的方向?或者失败了,有人可以建议一个集成并与紧凑框架一起工作的模拟框架吗?
谢谢
马特
我正在尝试让MEF重新组合它在更新导出的实例时所知道的所有部分.基本上我想让MEF更新所有在更改时导入连接字符串配置值的部分.一切看起来都很好,直到我想要更改实例.如果我尝试使用更新的值ComposeParts,它似乎将第二个部分实例添加到容器中,然后我的导入被更新,但是为null.
任何人都可以指出我哪里错了吗?或者我应该尝试以这种方式使用MEF?
我正在使用MEF预览9和目标.net框架3.5和WPF.
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.Linq;
using System.Text;
using Shouldly;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
MainClass main = new MainClass();
main.RunTest();
}
}
public class MainClass
{
[ImportMany]
public IEnumerable<Settings> Settings { get; set; }
public void RunTest()
{
AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(typeof(Settings).Assembly));
CompositionContainer container = new CompositionContainer(catalog);
container.SatisfyImportsOnce(this);
Config cfg = new Config
{
Settings = new Settings { ConnectionString = "Value1" }, …Run Code Online (Sandbox Code Playgroud) 我已经构建了一个outlook插件,我想远程调试它在我的开发机器上的vm中运行(vm是xpsp3 x32和outlook 2010,我的开发机器是7 x64与outlook 2007)
我(在用了很多关于用户帐户等问题之后)得到了vs2010和虚拟机vm之间的远程调试工作.我可以附加到一个简单的测试应用程序并设置断点,然后它们就会被击中.
但是,我似乎无法对outlook addin做同样的事情.我不能只附加到机器上运行的outlook.exe进程,因为它似乎没有加载插件模块,所以断点永远不会被击中.
我无法弄清楚如何让VS2010从本地构建的项目启动远程机器上的Outlook,我试图遵循这些 msdn文档,但设置工作目录的说明似乎不起作用,所以如果我设置它如示例所示并开始调试,它会显示一条消息,指出该文件夹不存在.
如果我将outlook addin项目的调试属性中的Start Action设置为'Start External Program'并将其指向outlook exe,那么VS2010将成功启动应用程序,但是,即使看起来断点也没有被击中表明他们已成功设置.
有没有人在远程调试vsto插件方面取得了成功?我究竟做错了什么?