小编Gui*_*e86的帖子

如何在.NET 4.x中强制完全垃圾回收?

我在.NET 4.x中遇到WeakReferences的问题,我正在运行测试以确保某些对象不再被引用(使用WeakReferences)并且我注意到框架版本之间的行为不一致:

using System;
using System.Text;
using NUnit.Framework;

[TestFixture]
public class WeakReferenceTests
{
    [Test]
    public void TestWeakReferenceIsDisposed()
    {
        WeakReference weakRef = new WeakReference(new StringBuilder("Hello"));

        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.WaitForFullGCComplete();
        GC.Collect();

        var retrievedSb = weakRef.Target as StringBuilder;
        Assert.That(retrievedSb, Is.Null);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

.NET 2.0  PASS
.NET 3.0  FAIL
.NET 3.5  PASS
.NET 4.0  FAIL
.NET 4.5  FAIL
Run Code Online (Sandbox Code Playgroud)

这是在某处记录的吗?

有没有办法强制GC在.NET 4.5中收集该引用?

提前致谢.

.net c# weak-references

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

在Visual Studio中共享指向代码中的位置(源文件/行号)的链接

我正在寻找Visual Studio 2010的插件(可能是TFS插件),在代码编辑器中添加"复制uri"上下文菜单条目,可以将文件/行号粘贴到IM对话中(skype)或者一封电子邮件,当然点击该链接会以正确的行号打开项目/文件(如果可能的话,如果是VS,则在现有实例中).

我在家工作,能够通过Skype(有时是电子邮件)与团队轻松共享代码位置会很不错.

我用谷歌搜索并没有发现任何东西,但它可能在像Resharper这样的大插件中可用,而不是广告.

tfs share visual-studio-2010

9
推荐指数
1
解决办法
2993
查看次数

是否可以"扩展"财产"类"?

我是C#的新手(上周开始),所以对我很冷静;).我想知道我是否能以某种方式编写自定义属性,让我解释一下:

我有一些部分类,我通过添加属性完成,但所有getter和setter的模式是相同的,所以我想分解这个:

public partial class Travel
{
    public String TravelName
    {
        get
        {
            return LocaleHelper.GetRessource(Ressource1);
        }
        set
        {
            if (this.Ressource1 == null)
                Ressource1 = new Ressource() { DefaultValue = value };
            else
                Ressource1.DefaultValue = value;
        }
    }

    public String TravelDescription
    {
        get
        {
            return LocaleHelper.GetRessource(Ressource2);
        }
        set
        {
            if (this.Ressource2 == null)
                Ressource2 = new Ressource() { DefaultValue = value };
            else
                Ressource2.DefaultValue = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,唯一改变的是Ressource1/Ressource2.我的目标是能够写出如下内容:

public partial class Travel
{
    public LocalizedString TravelName(Ressource1);

    public LocalizedString TravelDescription(Ressource2); …
Run Code Online (Sandbox Code Playgroud)

c# design-patterns properties

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

使用IEnumerable重载params函数

假设我有两个功能:

Foo(params INotifyPropertyChanged[] items)
{
   //do stuff
}

Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged
{
   Foo(items.ToArray());
}
Run Code Online (Sandbox Code Playgroud)

第二个允许我Foo从具有约束的泛型类调用where T : INotifyPropertyChanged,但第二个解析为自身,因此我得到堆栈溢出异常.

  1. 是否有可能在出现歧义时指定我想要调用哪个重载?
  2. 是否存在另一种params从泛型类调用函数的方法,假设泛型类型的约束使其成为该params类型的可行选项?

提前致谢!

c# generics params

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

使用ROW_NUMBER()OVER带有关系的十进制列时的未确定的排序顺序

我对sql server 2008有一个非常奇怪的错误:

要在CRUD应用程序详细信息视图中显示寻呼机,我发出sql请求以获取相对于当前的前一条和下一条记录,除了在DECIMAL列上排序时,它可以正常工作,我可以将问题减少到该查询(FTE是十进制的(18,2)):

WITH [IndexedRows] AS (
    SELECT 
        [ContactId], 
        [ContactCode],
        [FTE],
        [EmployeeName], 
        ROW_NUMBER() OVER ( ORDER BY [FTE] ASC ) AS [RowIndex]
    FROM   
        [Vw_HrEmployee]
)

/* 1. I can see ContactId 1109 is rowindex 7 */
/*SELECT * FROM [IndexedRows];*/

/* 2. Get the RowIndex, it returns 7 */
/*SELECT [RowIndex] 
FROM   [IndexedRows] 
WHERE  [ContactId] = 1109;*/

/* 3. Why it doesn't returns ContactId 1109 ??? */
SELECT [ContactId], 
       [EmployeeName] 
FROM   [IndexedRows] 
WHERE [RowIndex] = 7;
Run Code Online (Sandbox Code Playgroud)

我得到了另一个具有相同FTE值的人的contactId,但我不明白为什么WHERE rowindex没有返回正确的行(如果我显示IndexedRows,它看起来不错!).

我不认为这是令人讨厌的,但Vw_HrEmployee是一个视图. …

sql sql-server sql-server-2008 pager

3
推荐指数
2
解决办法
804
查看次数