我正在使用.Net 4中的新MemoryCache,最大缓存大小限制为MB(我测试它设置在10到200MB之间,系统内存介于1.75和8GB之间).我没有在对象上设置任何基于时间的过期,因为我将缓存简单地用作高性能驱动器,并且只要有空间,我希望它被使用. 令我惊讶的是,缓存拒绝驱逐任何对象,以至于我会得到SystemOutOfMemory例外.
我启动了perfmon,将我的应用程序连接到.Net CLR Memory\#Bytes In All Heaps,.Net Memory Cache 4.0并且Process\Private Bytes- 实际上,内存消耗已经失控,并且没有注册缓存修剪.
做了一些google搜索和stackoverflowing,下载并附着在CLRProfiler,和威猛:驱逐无处不在!根据我设置的内存大小限制,内存保持在合理的范围内.再次调试模式,没有驱逐.CLRProfiler再次驱逐.
我终于注意到,探查器强制应用程序在没有并发垃圾收集的情况下运行(另请参阅有用的SO并发垃圾收集问题).我在我的app.config中将其关闭了,果然,驱逐!
这似乎充满了令人遗憾的缺乏文档而不说:这只适用于非并发垃圾收集 - 虽然我从ASP.NET移植后映像,但他们可能不必担心并发垃圾收集.
那么有其他人看过这个吗?我希望得到一些其他经验,也许还有一些更有教育意义的见解.
更新1
我在一个方法中重现了这个问题:似乎必须并行写入缓存,以便缓存驱逐不被触发(在并发垃圾收集模式下).如果有兴趣,我会将测试代码上传到公共回购.我肯定会走向CLR/GC/MemoryCache池的深层,我想我忘了我的漂浮物......
更新2
我在CodePlex上发布了测试代码以重现该问题.此外,可能感兴趣的是,原始生产代码在Azure中作为工作者角色运行.有趣的是,在角色的app.config中更改GC并发设置无效.Azure可能会像ASP.NET一样覆盖GC设置吗?此外,在WPF和控制台应用程序下运行测试代码将产生略微不同的驱逐结果.
就在今天早上,Azure WebSites的管理门户不再允许我单独扩展.看起来我的所有网站都被归为"网络托管计划".现在,当我创建一个新网站时,我必须选择一个计划.我环顾四周,找不到任何关于"虚拟主机计划"的信息 - 这是一个早期推出的预览功能吗?有谁知道如何创建新计划并将网站切换到它?

有没有人有任何集成autofac和Quartz.Net的经验?如果是这样,哪里最好控制生命周期管理--IJobFactory,在IJob的执行中,或通过事件监听器?
现在,我正在使用自定义autofac IJobFactory来创建IJob实例,但我没有一种简单的方法来插入ILifetimeScopeIJobFactory中的a,以确保清除IJob中注入的任何昂贵资源.作业工厂只创建一个作业实例并将其返回.以下是我目前的想法(希望有更好的想法...)
看起来大多数AutoFac集成以某种方式包裹ILifetimeScope着他们创建的工作单元.显而易见的蛮力方式似乎是传递ILifetimeScope进入IJob并让Execute方法创建一个子进程ILifetimeScope并在那里实例化任何依赖.这似乎与服务定位器模式有点过于接近,这反过来似乎违背了autofac的精神,但它可能是确保正确处理范围的最明显的方法.
我可以插入一些Quartz事件来处理Job执行堆栈的不同阶段,并在那里处理生命周期管理.这可能会有更多的工作,但如果它能够更清晰地分离关注点,那么可能是值得的.
确保IJob是一个IServiceComponent类型的简单包装器,它可以完成所有工作,并将其作为Owned<T>或者请求Func<Owned<T>>.我喜欢这样看起来更像autofac,但我不喜欢它对IJob的所有实现者都不是严格可执行的.
如果我有一个没有模板的AngularJS指令,并且我希望它在当前作用域上设置属性,那么最好的方法是什么?
例如,一个计算按钮点击次数的指令:
<button twoway="counter">Click Me</button>
<p>Click Count: {{ counter }}</p>
Run Code Online (Sandbox Code Playgroud)
使用指令将点击计数分配给双向属性中的表达式:
.directive('twoway', [
'$parse',
function($parse) {
return {
scope: false,
link: function(scope, elem, attrs) {
elem.on('click', function() {
var current = scope.$eval(attrs.twoway) || 0;
$parse(attrs.twoway).assign(scope, ++current);
scope.$apply();
});
}
};
}
])
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?从我所读到的,一个孤立的范围将是矫枉过正,但我需要一个儿童范围?是否有更简洁的方法来回写指令属性中定义的范围变量而不是使用$parse.我觉得我让这个太难了.
Full Plunker 在这里.
我想在F#中建模一个层次结构,其中每个节点必须有一个父节点,显然是根节点,它没有父节点.我天真的解决方案
type Node = {
Id: int // meta data for node
Parent: Node option
}
let root = { Id = 1; Parent = None}
let child1 = { Id = 2; Parent = Some(root)}
let child2 = { Id = 3; Parent = Some(child1)}
Run Code Online (Sandbox Code Playgroud)
但是我进入F#已经通过@swlaschin而且他在创建描述性域名时让我大吃一惊.因此Parent,当我有99%的时间需要时,这对我来说是一种选择.我尽力而为:
type Node =
| Node of NodeMeta * Node
| Root of NodeMeta
and NodeMeta = {
Id: int
}
let root = Root({Id = 1})
let child1 = Node({Id = …Run Code Online (Sandbox Code Playgroud) 我有React类型定义文件(使用外部模块声明).在我的源文件中,我通常会这样做:
import * as R from "react"
Run Code Online (Sandbox Code Playgroud)
然后可以R.createElement(...以强烈的方式愉快地使用等.
我想要的是不必R在每个文件中导入,而是将其作为全局声明(是的,我愿意用一些变量来规划全局命名空间).我试过了:
import * as React from "react";
declare var R : React;
Run Code Online (Sandbox Code Playgroud)
这不起作用,我明白了"Cannot find name 'React'".有没有其他方法可以将整个模块导出为全局模块?
编辑1 - 我应该更清楚:我对如何在文件中导出全局类型定义感兴趣.d.ts.所以假设我已经R加入window了.现在我需要打字稿来知道它R是类型的React module.
如果我有一个具有会话一致性的DocumentDB数据库,那么使用etags对同一文档的并发写入有什么保证?例如,A和B在不同的会话中运行:
假设是:写入:B失败,因为etag是2,但是我没有找到任何关于DocumentDB从服务器上读取etag值的保证的明确文档,例如,它是否可以从辅助副本中读取etag仍然是1,让写:B仍然通过?
这个问题DocumentDB上的会话保证在评论中讨论了这个问题,但似乎没有得出结论.
来自FAQ https://docs.microsoft.com/en-us/azure/documentdb/documentdb-faq

从示例源(暗示,但未说明,这在所有一致性级别都适用?) https://github.com/Azure/azure-documentdb-dotnet/blob/master/samples/code-samples/DocumentManagement/ Program.cs:

我想使用jQuery 1.3.1在ASP.Net MVC RC2中创建一个简单的动作链接 - 类似这样:
<a href="#" onclick="AjaxTest1()">Tester</a>
与AjaxTest1功能:
function AjaxTest1() {
$.ajax({
url: "Home/Ajax1",
error: function(request, status, error) {
alert("error: " + status + ", " + "\n" +
error + ", " + request.responseText +
request.getAllResponseHeaders());
},
success: function(data, status) {
alert("Finally, it worked!");
},
type: "GET",
dataType: "text",
});
return false;
}
Run Code Online (Sandbox Code Playgroud)
和控制器动作:
public ActionResult Ajax1()
{
return this.Content("Test Content");
}
Run Code Online (Sandbox Code Playgroud)
我要做的就是返回一个简单的字符串 - 但是"错误"回调总是被调用,错误为parseerror.XmlHttpRequest中包含内容字符串"Test Content" - 因此正在调用控制器操作并返回正确的数据.我试图设置dataType(到"text","html","json"),在控制器中使用JsonResult类型,将返回的内容类型设置为"text/plain",使用$ .get ,$ .getJson等......什么都行不通.我觉得我必须错过一些非常非常简单的东西 - 特别是因为谷歌没有帮助.想法?
azure ×2
.net ×1
ajax ×1
angularjs ×1
asp.net ×1
asp.net-mvc ×1
autofac ×1
c# ×1
caching ×1
f# ×1
javascript ×1
jquery ×1
quartz.net ×1
typescript ×1