小编Sim*_*ker的帖子

不寻常的垃圾收集模式

我在.net 4.0下看到一些不寻常的垃圾收集模式,我无法解释,任何建议都会受到赞赏.

在我的程序运行的不同时间,G2收集计数开始增加,GC%时间接近100%.这会在停止前持续一段时间(请参阅下面的性能监视器屏幕抓取).在此期间,CLR GC ETW事件的PerfView跟踪显示许多长时间运行的G2集合正在以"AllocSmall"的原因背靠背触发.

任何人都可以了解一下:

  1. 绝对是导致'AllocSmall'事件的原因
  2. 为什么这些直接触发G2集合
  3. 为什么这些G2系列背靠背发生

LowMemory似乎不是问题,因为GC启动事件不会将其作为原因代码(http://msdn.microsoft.com/en-us/library/ff356162.aspx).我们也看到了类似的情况,其中G0集合背靠背发生.

编辑:有人建议触发器可能超出某个阈值.鉴于仍有可用的内存,我希望G2堆在这一点上扩展,而不是让GC捶打试图收集.

编辑:下面发布的图片分辨率远高于StackOverflow显示 - 只需在浏览器选项卡中直接打开图片链接即可.

性能监视器跟踪 PerfView事件跟踪

c# clr performance garbage-collection

10
推荐指数
1
解决办法
486
查看次数

如何实施恢复?

我一直在阅读Eric Lippert关于C#5中Asynchrony的博客文章(第4部分特别相关),并观看了Anders PDC10关于这个主题的讨论,我不清楚如何在单线程上下文中恢复异步方法的延续.

两个来源都讨论在单线程UI循环中使用异步方法来提高响应能力,在Anders的例子中,他提到当异步任务完成时,通过向消息泵添加消息来安排延续.

异步方法是否真的知道它需要执行看似特定于上下文的操作,还是简化?

更一般地说,如何在单线程上下文中处理异步方法的恢复?是否需要在单个线程内进行调度?

c# async-await c#-5.0

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

当从data.tables绘制直方图时,maxn不是此j列长度的精确倍数

我正在尝试从data.table分组的结果绘制直方图,但似乎无法在发生跟随错误之前生成多个图表:

错误[.data.table(DT ,,, hist(V2,break = 2),by = V1):maxn(3)不是此j列长度的精确倍数(2)

这个玩具示例应该有希望证明这个问题

require( data.table ) 
DT = data.table(c(1,1,2,2), c(1,2,3,4))

# This works
DT[,plot(V2,V2), by = V1] 

# This fails after the first plot
DT[,hist(V2, breaks = 2), by = V1] 
Run Code Online (Sandbox Code Playgroud)

关于我做错了什么的任何想法?

r data.table

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

使用data.table生成多个qplots

我想从data.table为每个组生成一个散点图并从函数返回它.

我可以使用plot(下图)生成不同的图表,所以我假设这不是data.table问题:

dt = data.table(A = c(1,2,3,4), B = c(1,1,2,2), C = c(4,5,6,7))
result = dt[, list(plot = list(plot(A, C))), by = B]
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试用qplot做同样的事情(为了获得我可以返回的情节),我似乎最终得到了第二张图的两个副本.

dt = data.table(A = c(1,2,3,4), B = c(1,1,2,2), C = c(4,5,6,7))
result = dt[, list(plot = list(qplot(A, C))), by = B]
result[1,][["plot"]]
result[2,][["plot"]]
Run Code Online (Sandbox Code Playgroud)

如果我错过了一些明显的东西/做一些愚蠢的事情,我会道歉.

r ggplot2 data.table

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