小编Kev*_*lin的帖子

C#最成熟的MongoDB驱动程序是什么?

所以,有

  • MongoDB的-CSHARP
  • 简单的MongoDB
  • 规范

作为MongoDB的C#驱动程序可用.

哪一个是最成熟稳定的?你为什么选择其他两个呢?

他们生产准备好了吗?

c# mongodb norm mongodb-.net-driver

26
推荐指数
4
解决办法
8307
查看次数

使用StatsD(通过etsy)和Graphite跟踪指标,石墨图似乎没有绘制所有数据

我们有一个度量标准,每当用户在我们的网站上执行某个操作时,我们就会递增,但这些图表似乎并不准确.

为了摆脱这种预感,我们投入了updated.log的碳,并发现今天的动作发生了超过4千次(使用grep和wc),但根据图的积分结果,它只返回220ish.

可能是什么原因造成的?正在使用statsd php库向statsd报告数据,并且statsd::increment('metric');如上所述,该日志确认此密钥今天发生了4,000多次更新.

我们正在使用:

石墨0.9.6,带有statsD(etsy)

visualization graph node.js graphite statsd

21
推荐指数
2
解决办法
7930
查看次数

禁用ASP.NET HttpHandler响应缓存

背景

我正在比较在IIS 7下运行的NancyFx和ServiceStack.NET的性能(在Windows 7主机上进行测试).两者都非常快 - 在本地测试每个框架进程超过10,000 req/sec,ServiceStack的速度提高了约20%.

我遇到的问题是ASP.NET似乎正在缓存来自HttpHandler的每个唯一URI请求的响应,很快导致大量内存压力(3 GB以上)和垃圾收集器过度工作(大约25%的时间消耗GC).到目前为止,我一直无法禁用对象的缓存和构建,并且正在寻找有关如何禁用此行为的建议.

细节

请求循环基本如下:

for i = 1..100000:
    string uri = http://localhost/users/{i}
    Http.Get(uri)
Run Code Online (Sandbox Code Playgroud)

响应是一个简单的JSON对象,格式为{UserID:n}.

我已经破解了打开的WinDBG,并且每个请求都有:

  • System.Web.FileChangeEventHandler
  • System.Web.Configuration.MapPathCacheInfos
  • System.Web.CachedPathDatas
  • System.Web.Caching.CacheDependencys
  • System.Web.Caching.CacheEntrys

显然,这些缓存项目让我相信它是一个缓存膨胀问题(我很想摆脱150,000个无法使用的对象!).

到目前为止我尝试过的

  • 在IIS的"HTTP Resonse Headers"中,将"Expire Web content"设置为"Immediate".
  • 在web.config中

    <system.web>
     <caching>
        <outputCache enableOutputCache="false" enableFragmentCache="false"/>
      </caching>
    </system.web>
    
    Run Code Online (Sandbox Code Playgroud)
  • 同样在web.config中(以及策略的许多变体,包括无).

    <caching enabled="false" enableKernelCache="false">
      <profiles>
        <add policy="DontCache" kernelCachePolicy="DontCache" extension="*/>
      </profiles>
    </caching>
    
    Run Code Online (Sandbox Code Playgroud)
  • 查看框架的源代码,看看是否可能存在使用ASP.NET缓存的任何"功能".虽然有缓存帮助程序,但它们对框架本身是私有的,并且似乎不利用ASP.NET缓存.

更新#1

通过反射器挖掘我发现将值设置UrlMetadataSlidingExpiration为零消除了过多内存使用的大部分,代价是将吞吐量减少50%(FileAuthorizationModule类缓存FileSecurityDescriptors,生成时必须有些昂贵,UrlMetadataSlidingExpiration是非零).

这是通过更新web.config并将以下内容放入:

<hostingEnvironment urlMetadataSlidingExpiration="00:00:00"/>
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我将尝试完全禁用FileAuthorizationModule运行,看看是否有帮助.但是,ASP.NET仍然会生成2*N MapPathCacheInfoCacheEntry对象,因此内存仍在消耗,速度要慢得多.

更新#2

另一半问题与此处描述的问题相同:阻止许多不同的MVC URL填充ASP.NET缓存.设置

<cache percentagePhysicalMemoryUsedLimit="1" …

asp.net caching httphandler servicestack nancy

18
推荐指数
1
解决办法
4115
查看次数

.NET RegEx"内存泄漏"调查

我最近在WinForms应用程序中查看了一些.NET"内存泄漏"(即意外的,挥之不去的GC根源对象).在加载然后关闭一个巨大的报告之后,即使在几个gen2集合之后,内存使用量也没有像预期的那样下降.假设报告控件被一个迷路事件处理程序保持活着,我破解了打开WinDbg以查看发生了什么......

使用WinDbg,该!dumpheap -stat命令报告了字符串实例消耗了大量内存.使用!dumpheap -type System.String命令进一步完善了这一点,我找到了罪魁祸首,一个用于报告的90MB字符串,地址为03be7930.最后一步是调用!gcroot 03be7930以查看哪些对象保持活着状态.

我的期望是不正确的 - 它不是一个悬挂在报告控件(和报告字符串)上的非挂钩事件处理程序,而是由一个System.Text.RegularExpressions.RegexInterpreter实例保留,该实例本身是一个的后代System.Text.RegularExpressions.CachedCodeEntry.现在,Regexs的缓存(有点)是常识,因为这有助于减少每次使用时重新编译Regex的开销.但是,这与保持我的弦活着有什么关系呢?

基于使用Reflector的分析,事实证明只要调用Regex方法,输入字符串就存储在RegexInterpreter中.RegexInterpreter保留此字符串引用,直到通过后续Regex方法调用将新字符串输入其中.我希望通过挂在Regex.Match实例上以及其他可能的类似行为.链是这样的:

  • Regex.Split,Regex.Match,Regex.Replace等
    • Regex.Run
      • RegexScanner.Scan(RegexScanner是基类,RegexInterpreter是上面描述的子类).

违规的Regex仅用于报告,很少使用,因此不太可能再次用于清除现有的报告字符串.即使后来使用正则表达式,也可能会处理另一份大型报告.这是一个相对重要的问题,只是简单的感觉很脏.

总而言之,我找到了一些关于如何解决或至少解决这种情况的选项.我会先让社区回复,如果没有人提出来,我会在一两天内填补空缺.

.net regex memory-leaks

14
推荐指数
1
解决办法
3194
查看次数

如何使用C#选择CodeDom编译器的目标框架?

所以我有一个用C#编写的CodeDOM编译器,它应该根据其中一个资源编译另一个应用程序.我如何更改资源(或编译器的输出可执行文件)的目标.NET框架?

c# codedom

8
推荐指数
1
解决办法
1738
查看次数

用声音关闭YouTube

以下代码必须如何更改才能将此YouTube关闭?

<embed src="http://www.youtube.com/v/etnh6_omu0w&hl&rel=1&autoplay=1&sound=1" type="application/x-shockwave-flash" 
allowscriptaccess="always" allowfullscreen="true" width="200"></embed>
Run Code Online (Sandbox Code Playgroud)

youtube audio

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

电子邮件通知 - 在域对象或服务中?

我正在寻找有关如何处理以下设计问题的建议(使用基于stackoverflow的虚构示例).我试图避免贫血领域模型,并寻求针对此类案例的一般"最佳实践"建议.

场景:

假设正在为stackoverflow开发一个新功能,只要他/她的问题收到10个upvotes就会向问题所有者发送电子邮件通知.

域对象模型是这样的:

public class Question
{
    string Question { get; set; }
    IList<Votes> Upvotes { get; set; }
    User Owner { get; set; }

    public void AddUpvote(Vote upvote)
    {
        Upvotes.Add(upvote);
    }
}
Run Code Online (Sandbox Code Playgroud)

潜在的实施:

  1. 更改AddUpvote()以获取IEmailerService参数并在AddUpvote()方法中执行逻辑.

    public void AddUpvote(Vote upvote, IEmailerService emailer)
    {
        Upvotes.Add(upvote);
        if ( Upvotes.Count == 10 )
        {
            emailer.Send(Owner.EmailAddr);
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 检测此状态AddUpvote()AddUpvote()从IoC容器中解析IEmailService(而不是将IEmailerService作为参数传递).

  3. 在调用的外部服务对象中检测此状态question.AddUpvote().

    public void UpvoteClickHandler(Question question)
    {
        question.AddUpvote(new Upvote());
        if ( question.Upvotes.Count == 10 …
    Run Code Online (Sandbox Code Playgroud)

domain-driven-design business-logic

3
推荐指数
1
解决办法
883
查看次数

我应该如何使用带有protobuf-net的Booksleeve?

我使用RedisConnection Set方法设置字节数组但是如何获取数据?get返回一个包装的字节数组?

链接:

这有效,但感觉不对:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BookSleeve;
using ProtoBuf;
using System.IO;
namespace RedisTest001
{
    [ProtoContract, Serializable]
    public class Price
    {
        private string _ticker;
        private double _value;

        public Price()
        {
        }

        public Price(string ticker, double value)
        {
            _ticker = ticker;
            _value = value;
        }


        [ProtoMember(1)]
        public string Ticker
        {
            get { return _ticker; }
            set { _ticker = value; }
        }

        [ProtoMember(2)]
        public double Value
        {
            get { return _value; }
            set …
Run Code Online (Sandbox Code Playgroud)

protobuf-net redis booksleeve

3
推荐指数
1
解决办法
3453
查看次数