小编Liv*_*foi的帖子

Visual Studio 2010中的"浏览到查找源"

何时在Visual Studio 2010中启用"浏览到查找源"?(见下文)

在此输入图像描述

另外,我想启用它,以便我可以从http://referencesource.microsoft.com/浏览已经下载的源代码文件.

这很有用,因为Microsoft并不总是使用最新的补丁同时发布PDB /源代码.因此,如果我想进入DateTime,我真的不关心不涉及DateTime的最新补丁.我只想浏览我从http://referencesource.microsoft.com/下载的代码.

经过一些调查后,我发现dia2dump是一个查看PDB文件内容的有用工具.(它在C:\Program Files (x86)\Microsoft Visual Studio 10.0\DIA SDK\Samples\DIA2Dump\)

看起来当我看不到类似DateTime的源代码时,使用.NET Framework步进,mscorlib.pdb实际上会下载一个文件.

但如果你用dia2dump查看它,它不包含源文件映射.换句话说没用,因为即使你可以像我最初的想法一样浏览源代码,它也行不通,因为没有源文件映射,没有函数的起始地址,还有很多东西丢失:(

我认为这里的解决方案是使用.NET Reflector Pro来保存虚拟机,使用源代码然后禁用更新的框架版本.

.net c# debugging visual-studio-2010 pdb

26
推荐指数
1
解决办法
2万
查看次数

为什么调用AppDomain.Unload不会导致垃圾回收?

当我执行AppDomain.Unload(myDomain)时,我希望它也可以执行完整的垃圾回收.

根据Jeffrey Richter在"CLR via C#"中的说法,他说在AppDomain.Unload期间:

CLR强制进行垃圾收集,回收由现在卸载的AppDomain创建的任何对象使用的内存.调用这些对象的Finalize方法,使对象有机会正确地清理自己.

根据"自定义.NET Framework公共语言运行时"中的"Steven Pratschner":

在所有终结器运行并且域中不再执行任何线程之后,CLR就可以卸载内部实现中使用的所有内存中数据结构.但是,在此之前,必须收集驻留在域中的对象.发生下一次垃圾收集后,将从进程地址空间卸载应用程序域数据结构,并将该域视为已卸载.

我误解了他们的话吗?我做了以下解决方案来重现意外行为(在.net 2.0 sp2中):

一个名为"Interfaces"的类库项目,包含此接口:

   public interface IXmlClass
    {
        void AllocateMemory(int size);

        void Collect();
    }
Run Code Online (Sandbox Code Playgroud)

一个名为"ClassLibrary1"的类库项目,它引用了"Interfaces"并包含了这个类:

public class XmlClass : MarshalByRefObject, IXmlClass
{

    private byte[] b;

    public void AllocateMemory(int size)
    {
        this.b = new byte[size];
    }

    public void Collect()
    {
        Console.WriteLine("Call explicit GC.Collect() in " + AppDomain.CurrentDomain.FriendlyName + " Collect() method");
        GC.Collect();
        Console.WriteLine("Number of collections: Gen0:{0} Gen1:{1} Gen2:{2}", GC.CollectionCount(0), GC.CollectionCount(1), GC.CollectionCount(2));
    }

    ~XmlClass()
    {
        Console.WriteLine("Finalizing in AppDomain {0}", AppDomain.CurrentDomain.FriendlyName);
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# applicationdomain

20
推荐指数
2
解决办法
6309
查看次数

哪个更好:委托{}或()=> {}

我想知道今天是否有任何理由更喜欢使用委托{}而不是()=> {},在你需要空函数的情况下.

你知道有什么理由比较喜欢一个吗?

c#

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

除了性能和可读性之外,为什么System.String是引用类型而不是值类型还有其他原因吗?

为什么String被设计为引用类型而不是值类型?

从建模的角度来看,我会将它建模为一个值类型,因为它表示没有身份的东西.它没有区别属性.(例如,我不能在一个字符串"a"和另一个字符串"a"之间产生任何区别)

我知道如果长字符串存储在堆栈中,我会遇到严重的性能问题.可能这是不可能的,因为字符串变得很长,因为堆栈的大小有限.

如果它不是为了性能,你为什么要将System.String设计为引用类型?(假设任何可能的字符串最多为16个字节)

c# string value-type

8
推荐指数
2
解决办法
264
查看次数

用于将热可观察区间转换为冷可观察区间的反应性扩展方法

假设我有这个热门的观察者,每隔5分钟发布连续数字:

1,2,... n,OnCompleted

在某个时间点,在热观察已经开始之后,但在它完成之前,我订阅它直到它完成.

我得到数字:x,x + 1,x + 2,...... n.

我想将收到的值转换为冷可观察量.这有特殊的操作员吗?

我知道我可以使用

Observable.Create(observer => hotObservable.Subscribe(onNext, onCompleted, onError);
Run Code Online (Sandbox Code Playgroud)

但我确信有一种我缺少的Rx扩展方法,就是这样

c# system.reactive

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

Silverlight IsolatedStorageFile.IncreaseQuotaTo

Msdn doc for IsolatedStorageFile.IncreaseQuotaTostates:

要增加配额,必须从用户启动的事件中调用此方法,例如在按钮单击事件的事件处理程序中.当您调用IncreaseQuotaTo方法时,Silverlight中的公共语言运行库会显示一个对话框,供用户批准该请求.如果用户拒绝请求,则此方法返回false,并且配额保持相同的大小.

Silverlight如何知道该方法是从用户启动的事件(如按钮单击而不是其他线程)调用的?

更具体地说:什么是用户发起的事件?有没有办法克服这个限制?

还有一个问题:

当用户第一次访问我的应用程序时,我会自动下载文件,但我不希望用户按"下载",然后当我检测到需要更多空间时,调用IncreaseQuota并出现"Silverlight对话框",要求更多空间.

我想自动开始下载(非用户启动),如果我检测到需要更多空间,请调用IncreaseQuota,然后出现"Silverlight对话框".(没有用户按下载).

c# silverlight isolatedstorage

0
推荐指数
1
解决办法
1323
查看次数