小编Jam*_*rld的帖子

为什么这个Observable.Generate重载会导致内存泄漏?[使用Timespan <15ms]

在我的机器上大约10秒后,以下Rx.NET代码将消耗大约500 MB的内存.

var stream =
    Observable.Range(0, 10000)
              .SelectMany(i => Observable.Generate(
                  0, 
                  j => true, 
                  j => j + 1, 
                  j => new { N = j },
                  j => TimeSpan.FromMilliseconds(1)));

stream.Subscribe();
Run Code Online (Sandbox Code Playgroud)

如果我使用Observable.Generate没有Func<int, TimeSpan>参数的重载我的内存使用量为35 MB.

var stream =
    Observable.Range(0, 10000)
              .SelectMany(i => Observable.Generate(
                  0,
                  j => true,
                  j => j + 1,
                  j => new { N = j }));
                  // j => TimeSpan.FromMilliseconds(1))); ** Removed! **

stream.Subscribe();
Run Code Online (Sandbox Code Playgroud)

使用SelectMany()或Merge()扩展方法时似乎只是一个问题.

c# system.reactive

12
推荐指数
1
解决办法
301
查看次数

Windows上的git责备报告"致命:HEAD中没有这样的路径<path>"

当我对文件夹e,g中的文件运行git blame时:

git blame Foo/FileA.txt

它返回

fatal: no such path 'Foo/FileA.txt' in HEAD

我可以清楚地看到该文件存在于文件系统中,并且同一文件夹中的其他文件可以成功归咎于 - 所以发生了什么?

我正在发布这个问题和答案,因为它让我今天难倒了一段时间,而且我找不到能够解决所有解决方案的单一答案.

git git-blame git-for-windows

12
推荐指数
1
解决办法
5641
查看次数

Application Insights csproj文件修改的意义

当我使用右键单击Visual Studio中的解决方案资源管理器中的ASP.NET应用程序时,可以使用"添加应用程序洞察遥测..."菜单选项将应用程序指向现有的Application Insights资源,生成的文件更改包括添加两个项目到.csproj文件:

<ApplicationInsightsResourceId>/subscriptions/$guid/resourcegroups/$rgname>/providers/microsoft.insights/components/$name</ApplicationInsightsResourceId>
<ApplicationInsightsAnnotationResourceId>/subscriptions/$guid/resourcegroups/$rgname/providers/microsoft.insights/components/$name</ApplicationInsightsAnnotationResourceId>
Run Code Online (Sandbox Code Playgroud)

我已经省略了一些信息 - $guid是Azure订阅GUID, $rgname并且$name分别是给Application Insights资源组和资源的名称.

  1. 每个元素之间有什么区别?他们似乎有相同的信息.

  2. 如果我想将遥测发送到差异环境中的不同Application Insights资源,文档告诉我需要在代码中为每个环境设置检测密钥 - 这很好 - 但是这些设置呢?它们是否用于驱动Visual Studio中的上下文相关菜单选项以外的任何其他内容?我是否需要在其他环境中担心它们?

azure-application-insights visual-studio-2015

12
推荐指数
1
解决办法
837
查看次数

Ninject多次注射并不像我想象的那样贪婪!怎么会?

如果我有一个ctor设置为多次注入的类,如下所示:

public Shogun(IEnumerable<IWeapon> allWeapons)
{
    this.allWeapons = allWeapons;
}
Run Code Online (Sandbox Code Playgroud)

绑定设置如下:

Bind<IWeapon>().To<Sword>();
Bind<IWeapon>().To<Dagger>().WhenInjectedInto<Shogun>();
Run Code Online (Sandbox Code Playgroud)

然后我会期望将Shogun用两种武器注入?但事实并非如此 - 它只会得到匕首.

如果我添加这样的进一步绑定:

Bind<IWeapon>().To<Sword>();
Bind<IWeapon>().To<Dagger>().WhenInjectedInto<Shogun>();
Bind<IWeapon>().To<Shuriken>().WhenInjectedInto<Shogun>();
Run Code Online (Sandbox Code Playgroud)

然后Shogun得到了Dagger和Shuriken.WhenInjectedInto<T>()看起来它应该只限制它应用的绑定而不影响其他绑定.我发现这种行为非常误导.

有人能解释一下这里发生了什么吗?

c# dependency-injection ninject inversion-of-control constructor-injection

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

如何在不使用Rx Framework的情况下限制事件的速度

我想限制事件的速度,如何在不使用Microsoft Rx框架的情况下实现这一目标.我在Rx的帮助下做到了这一点.但我正在尝试的是,我需要根据时间段限制Map的View更改事件.是否可以在不使用Rx的情况下实现相同的功能.

我不允许使用Rx,我必须保持二进制大小尽可能小.

c# system.reactive c#-5.0 windows-8 windows-runtime

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

如何在Rx中交替缓冲和流动实时数据流

我有两个流.一个是数据流(可以是任何类型),另一个是充当门的布尔流.我需要将这些组合成一个具有以下行为的流:

  • 当门打开(最近的值为真)时,数据应该直接流过
  • 当门关闭(最近的值为假)时,应该缓冲数据以在下一次打开门时作为单独的元素释放
  • 解决方案应保留数据的所有元素并保留顺序

我不太确定如何将它们放在一起.我一直在测试的输入是这样的:

// a demo data stream that emits every second
var dataStream = Observable.Interval(TimeSpan.FromSeconds(1));

// a demo flag stream that toggles every 5 seconds
var toggle = false;
var gateStream = Observable.Interval(TimeSpan.FromSeconds(5))
    .Select(_ => toggle = !toggle);
Run Code Online (Sandbox Code Playgroud)

c# system.reactive

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

使用静态`Serilog.ILogger`是否安全

我正在使用Serilog.我想写一个SourceContext包含类的日志条目.

这样做是否安全(包括线程安全):

using Serilog;

...

class Foo
{
    private static readonly ILogger Log =
     Serilog.Log.ForContext<Foo>();

    /* Invoke Log.Debug(...) etc. in other methods */
}
Run Code Online (Sandbox Code Playgroud)

文档(链接)有一个小例子,它在方法中添加上下文,而不是像上面那样为类型创建一个共享.我宁愿不必将相同的锅炉板代码放入我正在记录的每个方法中.根据经验,上述似乎有效,但任何人都可以提供明确的指导吗?

c# serilog

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

从Windows内存转储创建Java堆转储

我有一个JVM进程的Windows内存转储(DMP)文件.

有什么方法可以使用Java工具对此进行堆分析吗?SDK工具(jhat等)似乎没有帮助 - 他们似乎都期望Java堆转储.

(我有很多Windbg经验,但在Java调试时我是完全无知的)

这个类似的问题:Java进程的转储文件分析?在这一点上没有答案.

java debugging heap-memory

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

在powershell中,如何使用Rename-Item同时输出旧文件名和新文件名?

我想选择使用的文件列表Get-ChildItem通过管道输送到Rename-Item并与每行显示像"改名为输出显示文本oldfilenamenewfilename ".

我怎样才能做到这一点?

powershell get-childitem rename-item-cmdlet

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

rxjava和clojure异步神秘:期货承诺和代理人,哦,我的

我提前为本说明的长度道歉.我花了相当多的时间把它做得更短,而且这个小到我能得到它.

我有一个谜,非常感谢你的帮助.这个谜团来自于observer我在Clojure中写的一个rxjava的行为,这个rxjava来自于几个简单observable的在线样本.

一个observable同步onNext向其观察者的处理程序发送消息,我所谓的原则观察者表现得如预期的那样.

另一个observable异步在另一个线程上通过Clojure执行相同的操作future.完全相同的观察者不会捕获发布到其上的所有事件onNext; 它似乎在尾部丢失了随机数量的消息.

在等待promised onCompleted的到期和等待发送给agent收集器的所有事件的到期之间存在有意的争用.如果promise获胜,我希望看到falseonCompleted,并在一个很短可能队列agent.如果agent获胜,我希望看到trueonCompleted,所有的消息来自agent的队列.我不希望的一个结果是true来自onCompletedAND的短队列agent.但是,墨菲没有睡觉,而这正是我所看到的.我不知道垃圾收集是否有问题,或者是否有一些内部排队到Clojure的STM,或者我的愚蠢,或者完全不同的东西.

我在这里以自包含形式的顺序呈现源代码,以便可以直接运行lein repl.有三个cermonials可以解决问题:首先,leiningen项目文件,project.clj声明依赖于0.9.0Netflix的rxjava版本:

(defproject expt2 "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure               "1.5.1"]
                 [com.netflix.rxjava/rxjava-clojure "0.9.0"]]
  :main expt2.core)
Run Code Online (Sandbox Code Playgroud)

现在,命名空间和Clojure要求以及Java导入:

(ns expt2.core
  (:require clojure.pprint) …
Run Code Online (Sandbox Code Playgroud)

clojure netflix reactive-programming rx-java

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