小编Dav*_*vre的帖子

.Net 4 MemoryCache泄漏与并发垃圾收集

我正在使用.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和控制台应用程序下运行测试代码将产生略微不同的驱逐结果.

.net c# caching garbage-collection

37
推荐指数
1
解决办法
9904
查看次数

Azure网站 - 无法单独扩展网站(新的虚拟主机计划组)

就在今天早上,Azure WebSites的管理门户不再允许我单独扩展.看起来我的所有网站都被归为"网络托管计划".现在,当我创建一个新网站时,我必须选择一个计划.我环顾四周,找不到任何关于"虚拟主机计划"的信息 - 这是一个早期推出的预览功能吗?有谁知道如何创建新计划并将网站切换到它?

在此输入图像描述

azure azure-web-sites

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

Autofac和Quartz.Net集成

有没有人有任何集成autofacQuartz.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的所有实现者都不是严格可执行的.

autofac quartz.net

15
推荐指数
2
解决办法
6970
查看次数

AngularJS自定义指令双向绑定

如果我有一个没有模板的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 在这里.

javascript angularjs angularjs-directive

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

如何使用单根建模简单层次结构

我想在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)

f#

7
推荐指数
1
解决办法
179
查看次数

将Typescript全局变量声明为"模块"类型

我有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.

typescript typescript1.5

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

文档DB - 具有会话一致性的ETag乐观并发

如果我有一个具有会话一致性的DocumentDB数据库,那么使用etags对同一文档的并发写入有什么保证?例如,A和B在不同的会话中运行:

  • 阅读:A - etag:1
  • 阅读:B - etag:1
  • 写:A - etag:1(匹配,etag = 2)
  • 写道:B - etag:1?

假设是:写入: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: 在此输入图像描述

azure azure-cosmosdb

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

jQuery/ASP MVC - "$ .ajax"调用中的parsererror

我想使用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等......什么都行不通.我觉得我必须错过一些非常非常简单的东西 - 特别是因为谷歌没有帮助.想法?

asp.net ajax asp.net-mvc jquery

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