草庐IT

c# - 多处理器系统中 volatile 关键字的成本是多少?

我们遇到了性能问题,一个潜在的罪魁祸首是集中使用volatile单例。具体代码形式为classfoo{staticvolatileinstance;staticobjectl=newobject();publicstaticfooInstance{if(instance==null)lock(l){if(instance==null)instance=newfoo();}returnfoo();}}这是在一个8路盒子上运行的,我们看到上下文切换到每秒500,000次。典型的系统资源很好——25%的cpu利用率、25%的内存利用率、低IO、无分页等。使用volatile字段会导致内存屏障

c# - 类型初始化器(静态构造器)异常处理

我正在用C#编写WCF服务。最初我的实现有一个静态构造函数来做一些一次性初始化,但是一些正在进行的初始化可能(暂时)失败。似乎静态构造函数只被调用一次,即使第一次(失败的)尝试抛出异常?任何后续实例化我的类的尝试都将立即失败并返回TypeInitializationException,而代码并未实际执行。C#语言规范声明静态构造函数最多调用一次,但基本上这会产生一个异常,即使您捕获到它也无法从中恢复?我是不是漏掉了什么?我想我应该将任何远程危险移动到服务的实例构造函数并手动检查类初始化是否已经成功完成? 最佳答案 所以你可以将关键部

c# - 在 WebAPI 中使用自定义 IHttpActionInvoker 进行异常处理

我正在尝试将自定义IHttpActionInvoker添加到我的WebAPI应用程序,以防止在我的操作方法中需要大量重复的异常处理代码。除了thisarticle之外,似乎真的没有太多关于如何做到这一点的方法。.在按照文章编写我的IHttpActionInvoker之后,我添加了这段代码:GlobalConfiguration.Configuration.Services.Remove(typeof(IHttpActionInvoker),GlobalConfiguration.Configuration.Services.GetActionInvoker());GlobalConfi

c# - 使用路由属性时设置 web api 路由处理程序

我有一个自定义路由处理程序,我想在不同的Controller上使用。现在我让我的Controller使用这个路由处理程序的唯一方法是像这样设置它RouteTable.Routes.MapHttpRoute(name:"CustomRouteHandler",routeTemplate:"/custom/{controller}/{action}",defaults:new{id=RouteParameter.Optional,action=RouteParameter.Optional}).RouteHandler=newCustomRouteHandler();我真的很想像这样使用路

c# - 在 Mono 中处理通信的简单跨平台进程?

我正在开发一个将在Linux、Mac和Windows上运行的Mono应用程序,并且需要应用程序(在单个操作系统上)能够相互发送简单的字符串消息。具体来说,我想要一个单实例应用程序。如果尝试启动第二个实例,它将改为向已在运行的单个实例发送一条消息。DBus已经过时了,因为我不想让它成为一个额外的要求。套接字通信似乎很难,因为Windows似乎不允许连接权限。Mono似乎不支持内存映射文件。Mono似乎不支持命名管道。Mono似乎不支持IPC。那么,有没有一种简单的方法可以将单台机器上的字符串消息发送到适用于每个操作系统的服务器应用程序,而无需权限或其他依赖项?

c# - WP7 中的未处理异常

我在制作WP7应用程序时遇到了这个奇怪的错误,我不明白为什么。我得到的唯一输出/错误消息是“UnhandledException:参数不正确。::ProgramName.App”这个错误是随机发生的,我没有从调试器那里得到任何关于如何解决它的信息。当我两次运行相同的代码时,一次出现错误,另一次却没有。那么,你们中有没有人以前遇到过这个错误,也许可以告诉我为什么会这样?这太令人沮丧了,因为它是随机发生的。任何建议将不胜感激:)编辑:这是完整的堆栈跟踪:atMS.Internal.XcpImports.CheckHResult(UInt32hr)atMS.Internal.XcpImpor

c# - 控制台应用程序中的 .NET Core 全局异常处理程序

我正在将控制台应用程序移植到.NETCore,我正在尝试替换这一行:AppDomain.CurrentDomain.UnhandledException+=UnhandledException;看完this,似乎没有内置的方法来做到这一点。所以我的问题是:用try/catch替换围绕我的整个代码的这一行是唯一的方法吗?通过阅读this,似乎还有另一种方法,即继续使用System.AppDomain,但我似乎找不到此类/方法。我唯一的猜测是thislibrary,但它明确指出如果可能的话不应使用它,所以我不想这样做。 最佳答案 你是对

c# - 想要一个用于传入数据的 .Net 套接字事件处理程序

我正在用C#(.NetFramework4.0)重写一个古老的VB6程序。它与工厂车间的一台工业设备进行通信。VB6使用了一些旧的基于COM的套接字软件;我正在使用.NetSocket类。当我向设备发送一条消息时,我希望收到回复,这样我就知道要收听了。但是设备也可以在没有警告的情况下异步发送消息(例如,指示故障或问题)。所以我总是必须收到那些。所以我真正想要的是一个事件处理程序,只要设备有任何消息,它就会被调用。Socket类似乎使用BeginReceive/EndReceive方案来处理接收事件。我可以只在程序开始时执行一次BeginReceive来为所有传入消息定义事件处理程序,还

c# - 事件处理程序和匿名委托(delegate)/Lambda 表达式

我希望通过使用匿名委托(delegate)和lambda表达式来为C#中的事件处理程序创建方法来解决一些问题,至少对我自己而言。假设我们有一个添加匿名委托(delegate)或lambda表达式的事件(对于可以使用较新版本.NET的幸运人群)。SomeClass.SomeEvent+=delegate(objecto,EventArge){/*dosomething*/};我读到,过去的人们已经忘记了仍然有处理程序阻止类被垃圾收集的事件。如果不在类中将SomeEvent设置为null,将如何删除添加的处理程序。以下不是一个全新的处理程序吗?SomeClass.SomeEvent-=de

c# - 位图类不处理流?

所以,在发现thattheBitmapclassexpectstheoriginalstreamtostayopenforthelifeoftheimageorbitmap之后,我决定查明Bitmap类在处理时是否真的关闭了流。查看源代码,Bitmap和Image类创建一个GPStream实例来包装流,但不存储对GPStream或Stream实例的引用。num=SafeNativeMethods.Gdip.GdipLoadImageFromStreamICM(newGPStream(stream),outzero);现在,GPStream类(内部)没有实现Release或Dispose