小编Rob*_*Rob的帖子

我是否需要考虑处理我使用的任何IEnumerable <T>?

它最近向我指出,各种LINQ的扩展方法(如Where,Select等)返回IEnumerable<T>,恰巧也有IDisposable.以下评估结果True

new int[2] {0,1}.Select(x => x*2) is IDisposable
Run Code Online (Sandbox Code Playgroud)

我是否需要处理Where表达式的结果?

每当我打电话给一个方法返回时IEnumerable<T>,我(可能)接受在我完成它时调用dispose的责任吗?

c# linq ienumerable dispose

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

我可以在不实现IXmlSerializable的情况下为XmlSerializer提供自定义序列化吗?

我们正在使用XmlSerializer,我想为某些类提供自定义序列化.但是,我并不总是能够修改有问题的类的源代码,否则我可以让它实现IXmlSerializable.有没有办法做到这一点?

c# xml-serialization

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

我可以在Visual Studio 2010中使用Entity Framework 6吗?

我们的开发团队(和构建服务器)成功地将Visual Studio 2010和Visual Studio 2012混合使用.

但是,从EF5升级到EF6后,我们似乎无法再使用VS2010进行构建.具体来说,构建机器根本不会构建.我桌面上的VS2010确实可以构建,但是我收到以下错误:

Error   4   Error 10023: Could not find the conceptual model to validate. 
Error   5   Error 10024: Could not find the storage model to validate.
Error   6   Error 10025: Could not find the mapping model to validate.
Run Code Online (Sandbox Code Playgroud)

编辑:

我们的构建机器没有.Net 4.5,我们的台式机(由于IT策略)确实有.Net 4.5.在没有4.5的机器上,我们还得到以下内容,这会阻止组件生成.

Could not find the Conceptual Schema node to embed as a resource for input file
Run Code Online (Sandbox Code Playgroud)

entity-framework visual-studio-2010 entity-framework-6

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

GC .Net4中的GC:一起指定gcServer和gcConcurrent

我正在调整我们的服务器性能,并尝试指定以下配置,以及设置GCLatencyModeLowLatency.

<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<runtime>
  <gcServer enabled="true"/>
  <gcConcurrent enabled="false"/>
</runtime>
Run Code Online (Sandbox Code Playgroud)

这让我的性能提升了,直到一位同事指出这两个设置在.Net 4中是互斥的,我才非常高兴.

那么这将解决什么配置?当然,GCSettings.IsServerGC返回true,从设置gcConcurrent为false 可以获得非常可测量的性能提升.

(我将我正在分析的代码编译成测试工具,所以虽然它通常是由IIS托管的服务器,但我的所有时间都在控制台应用程序上)

.net c# garbage-collection .net-4.0

12
推荐指数
2
解决办法
7567
查看次数

Int32.CompareTo(int x)性能

以下是否有任何性能问题(例如执行拳击)?

public int CompareIntValues(int left, int right)
{
    return left.CompareTo(right);
}
Run Code Online (Sandbox Code Playgroud)

一些进一步的信息 该应用程序应该是软实时的,因此使用C#可能是一个奇怪的选择.但是,那不在我手中.

c# performance boxing

9
推荐指数
2
解决办法
1221
查看次数

将函数(带参数)作为参数传递给PowerShell

我已经使用ScriptBlocks在PowerShell中成功传递了无参数函数.但是,如果函数有参数,我无法使用它.有没有办法在PowerShell中执行此操作?(最好是v2)

Function Add([int] $x, [int] $y)  
{ 
  return $x + $y 
}
Function Apply([scriptblock] $s)    
{ 
    write-host ($s.Invoke(1,2)) 
}
Run Code Online (Sandbox Code Playgroud)

然后

Apply { Add } 
Run Code Online (Sandbox Code Playgroud)

将0写入控制台.Apply会调用Add,但不传递任何参数(即使用默认[int]值0和0)

powershell functional-programming powershell-2.0 first-class-functions

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

我可以在终结器中安全地访问引用类型实例字段/属性吗?

我一直认为这个问题的答案是否定的,但我找不到任何来源说明这一点.在我下面的课程中,我可以访问C终结器中实例的(托管)字段/属性,即在ReleaseUnmanaged()?有什么限制,如果有的话?GC或者终结是否会将这些成员设置为空?

我唯一能找到的是终结队列中的东西可以按任意顺序完成.所以在这种情况下,由于建议类型应该允许用户Dispose()多次调用,为什么推荐的模式会打扰disposing boolean?如果我的终结者打电话Dispose(true)而不是Dispose(false)

public class C : IDisposable
{
    private void ReleaseUnmanaged() { }

    private void ReleaseOtherDisposables() { }

    protected virtual void Dispose(bool disposing)
    {
        ReleaseUnmanaged();
        if (disposing)
        {   
            ReleaseOtherDisposables();
        }
    }

    ~ C()
    {
        Dispose(false);
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# dispose finalizer

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

是Stopwatch.ElapsedTicks线程安全吗?

如果我有一个共享System.Diagnostics.Stopwatch实例,多个线程可以shared.ElapsedTicks安全地调用并获得准确的结果吗?

以这种方式使用秒表的共享实例和使用静态GetTimeStamp()方法之间的线程安全性/准确性方面是否存在差异?

我测量的180ms时左右间隔,并且发现使用共享实例是给我结果的价差较大,包括更短,比我期望一个显著数量.

该机器有多个CPU(2*英特尔X5550,它的价值)

c# stopwatch

8
推荐指数
4
解决办法
8813
查看次数

在MSBuild中创建具有布尔表达式结果的属性

有没有一种巧妙的方法来创建在MSBuild中使用的"布尔"属性?我可以评估Condition属性中的表达式,但不能评估CreateProperty任务的Value属性.

我想做这样的事情:

<CreateProperty Value="'$(IncludeInBuild)'=='' OR 
    '$([System.Text.RegularExpressions.Regex]::IsMatch($(MSBuildProjectFullPath), 
    $(IncludeInBuild)'=='True'">
    <Output TaskParameter="Value" PropertyName="MatchesInclude" />
</CreateProperty>
Run Code Online (Sandbox Code Playgroud)

给我的不是真或假,而是

''=='' OR '$([System.Text...
Run Code Online (Sandbox Code Playgroud)

我可以评估布尔表达式并使用结果设置属性吗?我现在的解决方法是在条件属性中重复表达式,无论我需要它.

msbuild maintainability

8
推荐指数
1
解决办法
3492
查看次数

我可以"启动"CLR GC以期望使用挥霍的内存吗?

我们有一个服务器应用程序,它可以进行大量内存分配(包括短期内存和长期内存).我们在启动后不久就看到了大量的GC2系列,但这些系列在一段时间后会冷静下来(即使内存分配模式不变).这些系列在早期就达到了性能.

我猜这可能是由GC预算引起的(对于Gen2?).有没有什么方法可以设置这个预算(直接或间接),以使我的服务器在开始时表现更好?

我看到的一组反直觉的结果:我们大大减少了内存(和大对象堆)分配的数量,这使得长期性能得到改善,但早期性能变得更糟,并且"安定下来" "时间变长了.

GC显然需要一段时间来实现我们的应用程序是一个记忆猪并相应地适应.我已经知道这个事实,我如何说服GC?

编辑

  • 操作系统:64位Windows Server 2008 R2
  • 我们正在使用.Net 4.0 ServerGC Batch Latency.尝试了4.5和3种不同的延迟模式,虽然平均性能略有提高,但最坏情况下的性能实际上已经恶化

EDIT2

  • GC峰值可以将从可接受到不可接受的时间(我们正在谈论的秒数)加倍
  • 几乎所有的峰值都与第2代集合相关
  • 我的测试运行导致最终的32GB堆大小.最初的泡沫持续时间为运行时间的第1个1/5,之后的性能实际上更好(峰值频率更低),即使堆正在增长.测试结束时的最后一个峰值(具有最大堆大小)与初始"训练"期间的峰值中的2个(即坏)相同(具有小得多的堆)

.net c# garbage-collection memory-management

8
推荐指数
1
解决办法
284
查看次数