用于调试托管应用程序如果我有两个转储文件,还是要比较这两个文件吗?我正在考虑内存泄漏的情况,如果我在不同的时间拍摄过程快照,我想知道是否有任何自动比较文件并获得某种类型的报告,哪个对象的数量和/或大小增长最快.我知道您可以通过ANT内存分析器生成这些类型的报告,但为此目的寻找任何免费的工具/脚本.
我只是想知道WER写入转储文件的位置?这个位置也是特定于OS的吗?
我碰到下面的代码,不知道是什么有从这个代码两次的意思.这是否意味着书籍与CSBook之间存在联系?
List<Product> Books = new List<Product>();
List<Product> CSBooks = new List<Product>();
var AllBooks = from Bk in Books
from CsBk in CSBooks
where Bk != CsBk
select new[] { Bk, CsBk };
Run Code Online (Sandbox Code Playgroud) 我有一个小测试程序.当我查看主要线程的堆栈对象时,它MyClass在那里显示两次.任何想法为什么MyClass堆栈上有两个对象?
class Program
{
struct MyStruct
{
int x;
int y;
}
class MyClass
{
int x;
int y;
}
static void Main(string[] args)
{
MyStruct s ;
MyClass c = new MyClass();
}
}
Run Code Online (Sandbox Code Playgroud)
0:000> !DumpStackObjects
OS Thread Id: 0xf74 (0)
RSP/REG Object Name
000000000023e9e8 00000000028f3c90 ConsoleApplication2.Program+MyClass
000000000023e9f8 00000000028f3c90 ConsoleApplication2.Program+MyClass
000000000023ea10 00000000028f3c70 System.Object[] (System.String[])
000000000023eb98 00000000028f3c70 System.Object[] (System.String[])
000000000023ed80 00000000028f3c70 System.Object[] (System.String[])
000000000023eda8 00000000028f3c70 System.Object[] (System.String[])
Run Code Online (Sandbox Code Playgroud) 如果我在表上创建非聚集索引,SQL服务器是否会在该表中复制数据并将其单独存储?我只想考虑创建非聚集索引的成本.我猜选择索引中使用的密钥会更快,但所有插入,更新和删除都会很慢,因为sql server必须维护两个数据副本.我的理解是否正确?
我有一个Web服务应用程序,它公开了许多Web方法(内部调用内部API或外部Web服务).我想有一个工具来监视在IIS下运行的整个应用程序.为了清楚起见,我只是不想检查失败的请求,我也希望看到不同的呼叫需要多长时间.我想它必须像SQL Profiler工具,你可以查看所有类型的查询(那些成功运行和那些失败的查询),然后应用各种过滤器来关注你感兴趣的领域.
IIS中是否有可用于此目的的内容?
如果一个应用程序将其所有活动数据写入一个日志文件中,是否有使用多个TraceSource的用途?我只是对代码中需要多个TraceSource的用例感到好奇.
可能重复:
我如何知道崩溃转储的CLR版本?
如果我在WinDbg中打开一个转储文件(托管进程),那么无论如何都要找到该进程使用的.NET框架版本?
我正在抽象我的DbContext,试图解决Sepalate of Concerns并使我的代码单元可测试.为了做到这一点,我提出了以下接口.
下面的这个接口托管在名为AllInterfaces的程序集中.由于下面的声明中的IDbSet,该项目引用了EF dll.
public interface ISalesContext : IDisposable
{
IDbSet<Customer> Customers { get; }
IDbSet<Order> Orders { get; }
IDbSet<Product> Products { get; }
}
Run Code Online (Sandbox Code Playgroud)
我还创建了一个虚假的数据库集,如下所示.
public class FakeDataSet<T> : IDbSet<T> where T: class, new()
{
.......
}
Run Code Online (Sandbox Code Playgroud)
所以对于我的Customer对象,这个假数据集如下所示.
public class FakeCustomerDbSet : FakeDbSet<Customer>
{
..............
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了我的假上下文,如下所示.
public class FakeSalesContext : ISalesContext
{
public FakeSalesContext ()
{
Customers = new FakeCustomerDbSet ();
}
public IDbSet<Customer> Customers { get; set; }
public IDbSet<Order> Orders{ get; private …Run Code Online (Sandbox Code Playgroud) 我的理解是当一个Task抛出异常时,当观察到Tasks的(Result,WaitAll)属性或GC发生时,它会被存储并重新抛出.鉴于此,我运行以下代码.
Task t = Task.Factory.StartNew(() =>
{
throw new Exception("Hello World");
});
for (int i = 0; i < 10000; i++)
{
Console.WriteLine(i);
}
GC.Collect();
for (int a = 20; a < 30; a++)
{
Console.WriteLine(a);
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行上面的代码时,我除了在GC.Collect上抛出一个异常但它没有发生,而是继续从第二个循环打印输出.我的理解在哪里错了?
c# ×5
windbg ×4
sos ×3
.net ×2
c#-4.0 ×1
dbcontext ×1
iis-7 ×1
indexing ×1
linq ×1
monit ×1
sql-server ×1
task ×1
tracesource ×1
unit-testing ×1
web-services ×1
windows ×1