我发现"EE"对我来说是一个神奇的词.
在CLR内部,有一个"EEClass",它由CLR类加载器创建.而且我不知道它为何被称为EEClass.
现在,来到SOS世界,这里有更多的EE,比如EEHeap,EEStack [-EE],Name2EE ....它们在这里代表相同的含义吗?
首先,我们正在使用TFS 2013更新3,整个系统在今天的问题之前运行良好.
今天,我们的两个TFS构建代理都无法再成功完成TFS构建.
我检查了构建日志,发现构建过程在第一步CoreGet失败,如下所示
C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets(895,5,895,5):错误:执行Get操作时发生一个或多个错误
有趣的是,它不是没有得到每个文件,但只是没有得到一些文件; 更有趣的是,失败的获取文件列表并未修复.
在我的项目中,有超过10,000个文件,每次都有12个文件无法获取,但12个文件是随机挑选的(至少我没有找到任何模式).任何文件的错误信息是这样的:
C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets(895,5,895,5):错误:C:\ Builds\6\NameOfMyFile:服务器无法处理请求.--->对象引用未设置为对象的实例
我检查了构建代理的本地路径,实际上所有这些文件都是从TFS服务器成功获取并保存到构建代理.
有什么想法吗?
我使用 C# 编写了一个 Hello-world 控制台应用程序
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
Console.Read();
}
}
Run Code Online (Sandbox Code Playgroud)
,当我启动它时,它占用的内存是:

然后,我尝试创建该进程的转储文件:

创建dump后,该进程占用的内存为:

你可以看到工作集大小发生了很大的变化,这让我感到惊讶。
关于此内存增量的其他有趣之处是:
而且,这是我的问题:
1.为什么创建转储操作时会出现内存增量?
2.过去,当测试人员报告内存泄漏问题并向我发送转储文件时,我将转储文件大小视为目标进程在实验室环境中占用的内存大小。但从上面的简单例子来看,我似乎总是错的?
3.我非常好奇46MB转储文件里面有什么(换句话说,我非常好奇为什么当前的hello world应用程序占用了46MB内存)。我熟悉 SOS 命令,例如 !DumpHeap 或 !eeheap,但这些命令不足以告诉 46MB 大小的文件内的所有内容。有人可以分享一些有用的工具、链接或说明吗?
非常感谢您的帮助!
当我尝试使用windbg时,
.load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.dll
Run Code Online (Sandbox Code Playgroud)
完美地加载SOS扩展.
但是当我尝试使用建议的模式时
.loadby SOS
Run Code Online (Sandbox Code Playgroud)
要么
.loadby sos.dll
Run Code Online (Sandbox Code Playgroud)
我只能收到一条错误消息"扩展字符串中的语法错误".
我试图用Google搜索此错误消息,但没有找到任何有用的信息.
有什么建议 ?