小编Kon*_*tin的帖子

.NET中双重检查锁定需要volatile修饰符

多个文本说,当在.NET中实现双重检查锁定时,您锁定的字段应该应用volatile修饰符.但为什么呢?考虑以下示例:

public sealed class Singleton
{
   private static volatile Singleton instance;
   private static object syncRoot = new Object();

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null) 
         {
            lock (syncRoot) 
            {
               if (instance == null) 
                  instance = new Singleton();
            }
         }

         return instance;
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

为什么不"锁定(syncRoot)"完成必要的内存一致性?在"lock"语句之后,读取和写入都是不稳定的,因此必须实现必要的一致性,这不是真的吗?

c# singleton volatile

80
推荐指数
4
解决办法
2万
查看次数

.NET中工作程序和I/O线程的简单描述

在.NET中很难找到工作者和I/O线程的详细但简单的描述

我对这个主题有什么了解(但可能在技术上不精确):

  • 工作线程是应该为其工作使用CPU的线程;
  • I/O线程(也称为"完成端口线程")应该为其工作使用设备驱动程序,并且基本上"什么都不做",只监视非CPU操作的完成.

不清楚的是:

  • 虽然方法ThreadPool.GetAvailableThreads返回两种类型的可用线程数,但似乎没有公共API来为I/O线程安排工作.您只能在.NET中手动创建工作线程?
  • 似乎单个I/O线程可以监视多个I/O操作.这是真的吗?如果是这样,为什么ThreadPool默认有这么多可用的I/O线程?
  • 在某些文本中,我读到了I/O线程执行I/O操作完成后触发的回调.这是真的吗?考虑到这个回调是CPU操作,这不是工作线程的工作吗?
  • 更具体一点 - ASP.NET异步页用户I/O线程吗?将I/O工作切换到单独的线程而不是增加最大工作线程数的性能有什么好处?是因为单个I/O线程确实监视多个操作吗?或者Windows在使用I/O线程时进行更有效的上下文切换?

.net multithreading iocp

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

在Razor视图中引用JavaScript文件以获取JavaScript Intellisense

Visual Studio提供JavaScript Intellisense.很明智地看到您在主页中引用JavaScript文件(例如jQuery文件),然后在应用程序的任何视图中提供语句完成.然而,这似乎与Razor无关.有没有办法让这个与Razor一起工作?ASPX视图引擎提供了这个技巧,例如:<% /* %><script src="~/Scripts/jquery-1.4.1-vsdoc.js"></script><% */ %>

javascript javascript-intellisense razor

18
推荐指数
2
解决办法
2741
查看次数

.NET泛型术语 - 打开/关闭,未绑定/构造

.NET泛型术语有点含糊不清.更糟糕的是 - 它似乎在不同来源中含糊不清地使用.基本上不清楚的是这4个术语之间的关系(与"类型"有关):

  1. 打开
  2. 关闭
  3. 未绑定
  4. 建造

我明白这List<T>是开放的并且List<int>是封闭的.但是真正与开放/封闭类型相关的"构造"和"未绑定"是什么?

.net generics

15
推荐指数
1
解决办法
1474
查看次数

为什么在添加本地引用时,GAC的ASP.NET网站引用程序集?

当您使用ASP.NET网站(而不是Web应用程序模型)并从本地文件夹添加对程序集的引用时,Visual Studio似乎明白此本地程序集也在GAC中,因此不会将此程序集复制到bin文件夹(与非GAC程序集一样),但只是在web.config文件中添加新记录.

为什么这样的行为呢?是否可以强制复制到bin文件夹(我需要这个,因为.dll不在目标环境中)?我可以将程序集添加到bin文件夹作为文件,它将工作,但在这种情况下bin文件夹内容将在源代码管理,这是不好的.

asp.net clr visual-studio

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

.NET中long和double的最大值与大小的关系

众所周知,在.NET中,long和double的大小都是8个字节.但是,double可以存储比long长得多的数字.怎么可能,考虑到double还需要在小数点后的数字上存储数据?

更短版本的问题:

Math.Pow(2,64)== long.MaxValue Math.Pow(2,64)<double.MaxValue

.net types

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

Silverlight程序集与"普通".NET程序集不是二进制兼容的原因

Silverlight程序集与"普通".NET程序集不是二进制兼容的.考虑到使用相同的编译器来创建两种类型的程序集(尽管没有为Silverlight引用mscorlib.dll),它怎么可能呢?

silverlight

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

如何在WCF RIA Services框架中的域服务之间共享实体?

如果我要构建一个具有多个域服务的大型WCF RIA Services应用程序,我怎么能拥有某些实体,这些实体在这些域服务之间共享并在不同的上下文中由它们公开.例如,我可以拥有一个Cutomer实体,它由Orders和Loyalty模块/域服务公开.至少我自己用[ExternalAttribute]和其他人进行的实验似乎表明框架不能很好地支持这一点.

.net silverlight wcf rich-internet-application

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

什么是Moonlight技术上?

从技术角度来看,互联网上关于Moonlight究竟是什么的信息令人惊讶.将它理解为基于Mono的CoreCLR +基础库(与Silverlight作为插件本身的一部分相同的.dll)是否正确?

这是否意味着如果我有Silverlight 3.0应用程序和我引用基础库,再加上开发我自己的Silverlight库,这个应用程序在Moonlight 3.0(如果可用)中的工作方式相同,当然除了bug等.

moonlight

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

在登录/注销方案中以编程方式清除HTML 5应用程序缓存

HTML 5离线逻辑封装在window.applicationCache对象中.但是,看起来无法以编程方式清除缓存数据,例如,当用户从系统注销时.有没有其他方法可以清除HTML 5应用程序缓存,除了生成空清单文件?

html5 application-cache

4
推荐指数
1
解决办法
7101
查看次数