小编HH.*_*HH.的帖子

MSMQ竞争消费者

有人能告诉我MSMQ(使用交易)是否支持竞争消费者?基本上,我有多个线程将消息从单个队列中排除.只是想确保这一点有效,因为MSMQ的行为有时与我预期的不同.

msmq msmq-transaction

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

了解.NET GC和OutOfMemory异常

我正在对我的.NET 2.0 Windows服务应用程序中的OutOfMemory异常进行故障排除.为了更好地理解这个问题,我首先编写了一个简单的.NET WinForm测试应用程序,该应用程序通过构建ArrayList来生成OOM异常,直到抛出OOM异常为止.捕获并记录异常,我可以单击表单按钮再次运行OOME.我发现的奇怪的事情是在第4次运行时,在下一个OOME之前消耗的内存量大约是一半.每次运行时,下面列出的结果都是一致的.Eyeballing TaskManager也确认了这一行为.不幸的是,当试图获得更好的统计数据时,Perfmon冻结了.有人可以解释为什么3次运行后内存限制会降低吗?我对GC的理解相当浅薄.您还可以看到我在多次运行后运行GC.Collect(),但它没有帮助降低限制.

更新:我还发现使用const字符串与每个arraylist项目的新对象有很大的不同.代码很简单:

const string TEST_TEXT = "xxxxxxxxxx";
ArrayList list = new ArrayList();
while (true)
{
    list.Add(TEST_TEXT);
}
Run Code Online (Sandbox Code Playgroud)

启动循环:内存10,350,592

  • 抛出OOM异常
  • 数组大小:134,217,728

结束循环:存储器550,408,192

启动循环:内存550,731,776

  • 抛出OOM异常
  • 数组大小:134,217,728

结束循环:内存551,682,048

启动循环:内存551,813,120

  • 抛出OOM异常
  • 数组大小:134,217,728

结束循环:内存551,772,160

启动循环:内存551,903,232

  • 抛出OOM异常
  • 数组大小:67,108,864

结束循环:内存282,869,760

启动循环:内存283,004,928

  • 抛出OOM异常
  • 数组大小:67,108,864

结束循环:内存282,910,720

GC.Collect手动触发

Start Loop:内存14,245,888

  • 抛出OOM异常
  • 数组大小:67,108,864

结束循环:内存283,344,896

.net garbage-collection out-of-memory

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