小编Mor*_*eng的帖子

minify和concatenate的顺序是否会对批量的JavaScript/CSS文件产生影响?

要减少http请求并缩小静态文件下载,建议连接并缩小单页使用的所有JavaScript/CSS文件.

它有所不同吗?

1)缩小所有javascript文件,然后连接它们;

2)连接所有javascript文件,然后缩小它们.

javascript compression concatenation

11
推荐指数
1
解决办法
1442
查看次数

为什么使用显式接口实现来调用受保护的方法?

codeplex中浏览ASP.NET MVC源代码时,我发现有一个类显式实现接口是很常见的.显式实现的方法/属性然后调用具有相同名称的另一个"受保护的虚拟"方法/属性.

例如,

public class MvcHandler : IHttpHandler, IRequiresSessionState 
{
    protected virtual bool IsReusable 
    {
        get 
        {
           return false;
        }
    }

    bool IHttpHandler.IsReusable 
    {
        get 
        {
           return IsReusable;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在确定这种编程的好处是什么.对我来说,我更喜欢隐式实现接口IHttpHandler.

我猜作者只是不希望MvcHandler有一个公共属性IsResuable.仅当MvcHandler的实例被视为IHttpHandler时,才能使用属性IsReusable.不过,我不确定为什么作者这样做.

有谁知道这种界面实现的更多好处?

c# interface implicit explicit-interface

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

如何以编程方式在XPathExpression实例中使用XPath函数?

我当前的程序需要以编程方式使用创建XPathExpression实例来应用于XmlDocument.xpath需要使用一些XPath函数,如"ends-with".但是,我找不到在XPath中使用"ends-with"的方法.一世

它抛出异常如下

未处理的异常:System.Xml.XPath.XPathException:需要命名空间管理器或XsltC ontext.此查询具有前缀,变量或用户定义的函数.
System.Xml.XPath.XPathNavigator.Evaluate(XPathExpression expr)上的System.Xml.XPath.XPathNavigator.Evaluate(XPathExpression expr,XPathNodeIt erator context)中的MS.Internal.Xml.XPath.CompiledXpathExpr.get_QueryTree(
)

代码是这样的:

    XmlDocument xdoc = new XmlDocument();
    xdoc.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
                        <myXml xmlns=""http://MyNamespace"" xmlns:fn=""http://www.w3.org/2005/xpath-functions""> 
                        <data>Hello World</data>
                    </myXml>");
    XPathNavigator navigator = xdoc.CreateNavigator();

    XPathExpression xpr;
    xpr = XPathExpression.Compile("fn:ends-with(/myXml/data, 'World')");

    object result = navigator.Evaluate(xpr);
    Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)

我试图在编译表达式时更改代码以插入XmlNamespaceManager,如下所示

    XmlDocument xdoc = new XmlDocument();
    xdoc.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
                        <myXml xmlns=""http://MyNamespace"" xmlns:fn=""http://www.w3.org/2005/xpath-functions""> 
                        <data>Hello World</data>
                    </myXml>");
    XPathNavigator navigator = xdoc.CreateNavigator();
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
    nsmgr.AddNamespace("fn", "http://www.w3.org/2005/xpath-functions");

    XPathExpression xpr;
    xpr = XPathExpression.Compile("fn:ends-with(/myXml/data, 'World')", nsmgr);

    object result = navigator.Evaluate(xpr);
    Console.WriteLine(result); …
Run Code Online (Sandbox Code Playgroud)

c# xml xpath namespaces

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

.NET没有可靠的异步套接字通信?

我曾经在.NET中编写了一个Crawler.为了提高其可伸缩性,我尝试利用.NET的异步API.

System.Net.HttpWebRequest具有异步API BeginGetResponse/EndGetResponse.但是,这对API只是为了获取HTTP响应头和Stream实例,我们可以从中提取HTTP响应内容.所以,我的策略是使用BeginGetResponse/EndGetResponse来异步获取响应Stream,然后使用BeginRead/EndRead从响应Stream实例异步获取字节.

在Crawler进行压力测试之前,一切看起来都很完美.在压力测试下,Crawler遭受高内存使用.我用WinDbg + SoS检查了内存,并说明System.Threading.OverlappedData实例有很多字节数组.经过一些互联网搜索后,我从微软发现了这个KB http://support.microsoft.com/kb/947862.

根据KB,异步I/O的数量应该具有"上限",但它不会告诉"建议的"绑定值.所以,在我看来,这个KB没有任何帮助.这显然是一个.NET错误.最后,我不得不放弃从响应Stream中异步提取字节的想法,而只是以同步方式进行.

允许带有点网络套接字的异步IO的.NET库(Socket.BeginSend/Socket.BeginReceive/NetworkStream.BeginRead/NetworkStream.BeginWrite)必须具有其异步IO的未完成缓冲区(发送或接收)数量的上限.

网络应用程序应该具有其发布的未完成异步IO 数量的上限 .

编辑:添加一些问号.

任何人都有在Socket和NetworkStream上进行异步I/O的经验吗?一般来说,生产中的爬虫是否通过同步或异步的互联网进行I/O操作?

.net c# sockets stream web-crawler

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

是否可以在运行时为.NET应用程序切换应用程序配置文件?

默认情况下,.NET应用程序的配置文件以"exe文件名".config命名.我想知道是否可以动态指定一个应用程序的配置.

例如,构建的应用程序是"foo.exe".在运行时,配置文件是"foo.exe.config".是否可以让它接受命令行参数来使用其他配置文件.因此,应用程序可以使用下面的其他配置.

foo.exe /config:bar.config

bar.config用作foo.exe.config的配置文件.

.net c# configuration

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

C#接口实现关系只是"可以做"的关系?

今天有人告诉我,C#中的接口实现只是"Can-Do"关系,而不是"Is-A"关系.这与我长期相信LSP(Liskov Substitution Principle)相冲突.我一直认为所有的继承都应该意味着"Is-A"的关系.

所以,如果接口实现只是一个"可以做"的关系.如果有一个界面"IHuman"和"IEngineer",并且一个类"Programmer"继承自"IHuman"和"IEngineer"怎么办?当然,"程序员"是"IHuman"和"IEngineer".

如果只是"Can-Do"关系,是否意味着我们不能指望"程序员"实例行为在被视为IHuman并被视为IEngineer时可能会有所不同?

c# inheritance liskov-substitution-principle interface

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

在翻译LINQ表达式时,C#编译器如何选择SelectMany?

Enumerable.SelectMany有4个重载签名.为简单起见,我们忽略了带有int参数的两个签名.所以我们有4个SelectMany签名:

public static IEnumerable<TResult> SelectMany<TSource, TResult>(
    this IEnumerable<TSource> source,
    Func<TSource, IEnumerable<TResult>> selector
)

public static IEnumerable<TResult> SelectMany<TSource, TCollection, TResult>(
    this IEnumerable<TSource> source,
    Func<TSource, IEnumerable<TCollection>> collectionSelector,
    Func<TSource, TCollection, TResult> resultSelector
)
Run Code Online (Sandbox Code Playgroud)

我的问题是:在将LINQ表达式转换为扩展方法调用时,C#编译器如何选择SelectMany?

基本上,如果LINQ表达式中有多个from,则会有SelectMany.但是,似乎C#编译器只选择第二个签名.永远不会使用第一个签名.

        IEnumerable<int> en1 = Enumerable.Range(1, 3);
        IEnumerable<double> en2 = new double[] { 1.0, 3.14 };

        IEnumerable<string> en3 =
            from i1 in en1
            from i2 in en2
            select (i1 * i2).ToString();

        foreach (var i in en3)
        {
            Console.WriteLine(i);
        }
Run Code Online (Sandbox Code Playgroud)

在Reflector的帮助下,我可以看到上面的LINQ表达式被翻译成了

en1.SelectMany<int, double, string>(delegate (int i1) { …
Run Code Online (Sandbox Code Playgroud)

c# linq select expression

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

C#是否自动解决静态数据成员之间的依赖关系?

如果一个静态数据成员依赖于另一个静态数据成员,C#/ .NET是否保证依赖成员之前初始化依赖的静态成员?

例如,我们有一个类,如:

class Foo
{
    public static string a = "abc";

    public static string b = Foo.a + "def";
}
Run Code Online (Sandbox Code Playgroud)

当访问Foo.b时,它总是"abcdef"还是"def"?

如果不能保证,有没有更好的方法来确保首先初始化depen成员?

c# static data-members

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

为什么<C-PageUp>和<C-PageDown>在vim中不起作用?

我在Windows上安装了Vim 7.2.在GVim中,默认情况下在选项卡之间导航<C-PageUp><C-PageDown>工作.但是,它对Vim不起作用.

我甚至添加了下面的行_vimrc,但它仍然无效.

map <C-PageUp> :tabp<CR>
map <C-PageDown> :tabn<CR>
Run Code Online (Sandbox Code Playgroud)

但是,地图和工作.

map <C-left> :tabp<CR>
map <C-right> :tabn<CR>
Run Code Online (Sandbox Code Playgroud)

有人知道为什么?

vim tabs dictionary

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

如何在mongodb shell中查看分片键?

这可能是一个虚拟问题,但我找不到所有在线文档中的任何线索.

对于已经建立的mongodb集群,我如何找到给定的集合使用哪些分片密钥

sharding mongodb

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