我在.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中收集该引用?
提前致谢.
我正在寻找Visual Studio 2010的插件(可能是TFS插件),在代码编辑器中添加"复制uri"上下文菜单条目,可以将文件/行号粘贴到IM对话中(skype)或者一封电子邮件,当然点击该链接会以正确的行号打开项目/文件(如果可能的话,如果是VS,则在现有实例中).
我在家工作,能够通过Skype(有时是电子邮件)与团队轻松共享代码位置会很不错.
我用谷歌搜索并没有发现任何东西,但它可能在像Resharper这样的大插件中可用,而不是广告.
我是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) 假设我有两个功能:
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,但第二个解析为自身,因此我得到堆栈溢出异常.
params从泛型类调用函数的方法,假设泛型类型的约束使其成为该params类型的可行选项?提前致谢!
我对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是一个视图. …
c# ×3
.net ×1
generics ×1
pager ×1
params ×1
properties ×1
share ×1
sql ×1
sql-server ×1
tfs ×1