要减少http请求并缩小静态文件下载,建议连接并缩小单页使用的所有JavaScript/CSS文件.
它有所不同吗?
1)缩小所有javascript文件,然后连接它们;
2)连接所有javascript文件,然后缩小它们.
在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.不过,我不确定为什么作者这样做.
有谁知道这种界面实现的更多好处?
我当前的程序需要以编程方式使用创建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) 我曾经在.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应用程序的配置文件以"exe文件名".config命名.我想知道是否可以动态指定一个应用程序的配置.
例如,构建的应用程序是"foo.exe".在运行时,配置文件是"foo.exe.config".是否可以让它接受命令行参数来使用其他配置文件.因此,应用程序可以使用下面的其他配置.
foo.exe /config:bar.config
bar.config用作foo.exe.config的配置文件.
今天有人告诉我,C#中的接口实现只是"Can-Do"关系,而不是"Is-A"关系.这与我长期相信LSP(Liskov Substitution Principle)相冲突.我一直认为所有的继承都应该意味着"Is-A"的关系.
所以,如果接口实现只是一个"可以做"的关系.如果有一个界面"IHuman"和"IEngineer",并且一个类"Programmer"继承自"IHuman"和"IEngineer"怎么办?当然,"程序员"是"IHuman"和"IEngineer".
如果只是"Can-Do"关系,是否意味着我们不能指望"程序员"实例行为在被视为IHuman并被视为IEngineer时可能会有所不同?
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#/ .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成员?
我在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)
有人知道为什么?
这可能是一个虚拟问题,但我找不到所有在线文档中的任何线索.
对于已经建立的mongodb集群,我如何找到给定的集合使用哪些分片密钥?
c# ×7
.net ×2
interface ×2
compression ×1
data-members ×1
dictionary ×1
expression ×1
implicit ×1
inheritance ×1
javascript ×1
linq ×1
liskov-substitution-principle ×1
mongodb ×1
namespaces ×1
select ×1
sharding ×1
sockets ×1
static ×1
stream ×1
tabs ×1
vim ×1
web-crawler ×1
xml ×1
xpath ×1