在这里遇到我们的网络应用程序的棘手问题.(Asp.net 2.0 Win server 2008)
我们对网站的内存使用量增长和增长,即使我希望它保持在相当静态的水平.(我们有少量数据存储在状态中).
想要找出问题所在,我运行了一个System.GC.Collect(); 几次,采取内存转储,然后将此内存转储加载到WinDbg.
当我执行DumpHeap -Stat时,我会在内存中挂起特定类型的非常大的数字.
0000064280580b40 713471 79908752 PaymentOption
所以,为这种类型做一个DumpHeap -MT,我得到一堆对象引用.挑选一些随机数,我做了一个!gcroot,命令回来报告没有引用它.
对我而言,这正是GC应该收集这些项目的时候,但由于某种原因,它们一直处于劣势.
任何人都可以解释可能发生的事情吗?
我知道这样做是错误的,但我正在处理具有NULLS的遗留代码库,当它意味着空字符串时,反之亦然.
我无法立即看到它是如何可能的,但是当从数据库映射回来时,是否有可能获得(或修改小巧的所以它会返回空字符串而不是空字符串).
奇怪的一个.我们有一个多线程应用程序,它从MSMQ队列中提取消息,然后根据消息执行操作.所有这些都是使用DTC完成的.
有时,由于某些原因我无法描述,我们在将消息从队列中拉出时会收到消息读取错误.
应用中使用的代码:
Message[] allMessagesOnQueue = this.messageQueue.GetAllMessages();
foreach (Message currentMessage in allMessagesOnQueue)
{
if ((currentMessage.Body is IAMessageIDealWith))
{
// do something;
}
}
Run Code Online (Sandbox Code Playgroud)
访问currentMessage.Body时,有时会抛出异常:
System.InvalidOperationException:接收消息时未检索到Property Body.确保正确设置了PropertyFilter.
现在 - 这只在某些时候发生 - 看起来好像队列中的MessageReadPropertyFilter将Body属性设置为false.
至于它是如何变得像这有点神秘.Body属性是默认值之一,我们absolutley从未明确地将其设置为false.
有没有其他人看到这种行为或有一些想法为什么这个值被设置为假?