小编Dre*_*mer的帖子

无法使用visual studio 2013调试托管代码("无法评估表达式"错误 - 使用调试版本)(请注意,VS 2012可以正常工作)

我有针对4.5构建的.net应用程序(GUI和PowerShell).我的操作系统是服务器2012.当我将我的应用程序附加到2013 Visual Studio时,调试器有时无法运行.它没有评估表达式或显示本地(并且还观察窗口/即时窗口没有任何作用 - 就好像项目是使用发布构建的).但我使用'Debug'配置构建.如上所述,当我简单地附加VS 2012时,同样的事情是有效的(是的,我有2k13和2k12 SXS)

请注意,如果我使用相同的设置(托管调试)附加相同的进程,则它始终有效.

我确保加载了符号(通过检查visual studio + debug + windows中的模块选项卡),点击了断点.

关于可能出现什么问题的任何想法?所有更新都是最新的.

当我使用VS 2k13 IDE进行开发时,它对于启动vs 2012只是为了调试而烦人.

问候!

.net c# powershell visual-studio

54
推荐指数
2
解决办法
5万
查看次数

WCF - 渠道工厂与客户群

我是WCF的新手.最初,我创建了一个WCF服务,并使用生成的客户端代理来使用来自客户端的服务.因此,每当我在服务上执行某些操作时,所有按顺序执行的操作都会同步调用操作.我将并发模式更改为多个,但操作仍然是同步进行的.然后我为我的操作生成了异步方法,并使用了开始/结束模式,因此我猜测它"释放"了通道并让操作并行/异步地增加了我的应用程序的吞吐量.

然后我用来ChannelFactory创建一个通道并执行操作,因为客户端和服务器可以共享合同(同一个项目).但IClientChannel只提供BeginOpen/EndOpen/BeignClose/EndClose.它不具备ClientBaseBeginOperation/EndOperation方法.所以基本上我不能在通道上异步执行操作来释放,以便我可以使用该通道执行其他操作.

我只是为每个操作创建了通道,它解决了这个问题

所以我的问题是:

  1. 哪个更好(ClientBase vs. ChannelFactory)wrt到我的场景特别是我想同时用多个线程对服务对象执行多个操作

  2. 是否建议为每个操作创建一个通道?

  3. 事实上,我认为我们在两个端点(客户端/服务)之间只能有一个通道.但我可以创建尽可能多的频道.例如:我能够创建通道的Int16.MaxValue.所以不确定这个限制和建议是什么.

    Service[] channels = new IService[Int16.MaxValue];
    
    for(int i = 0; i<Int16.MaxValue; i++)
    {
       channels[i] = factory.CreateChannel();
    }
    
    Run Code Online (Sandbox Code Playgroud)

所以基本上你能告诉我有关频道,推荐和技巧的基础知识......等等.:)

wcf wcf-client

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

标准配置模式?为什么我们需要在虚拟方法中使用"disposing"参数,而不是在dipose之后调用终结器?

为什么我们需要的参数配置在下面的代码片段.

此外,我们在终结器中使用false来调用dispose,它不会释放或进行清理.

那么如果处置永远不会被召唤怎么办?

在终结器之前总是被调用吗?

using System;
public class MyClass : IDisposable 
{ 
    private bool disposed = false;  
    protected virtual void Dispose(bool disposing) 
    {    
        if (!disposed)
        {
            **//Do we really need this condition?
            if (disposing)**
            { 
                // called via myClass.Dispose().    
                // OK to use any private object references
            }
            disposed = true; 
        } 
    }
    public void Dispose() 
        // Implement IDisposable     
    {
        Dispose(true);   
        GC.SuppressFinalize(this); 
    } 
    ~MyClass() // the finalizer
    {
        //why do we need to call with false?
        Dispose(false);    
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# c#-3.0

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

如果在应用程序域中访问静态数据,会发生什么?

我有一个静态类,它有一些静态数据.如果数据从不同的应用域访问,会发生什么?

  1. 每个域都会有一个静态类的副本吗?

  2. 原始类型会被复制吗?

  3. 如果数据可序列化怎么办?

.net appdomain

6
推荐指数
2
解决办法
1928
查看次数

如何在.net中找到当前线程的最大堆栈大小?

如何找到当前线程的最大堆栈大小?

我在从MMC UI执行函数时遇到堆栈溢出异常,但没有从Powershell(命令行/控制台)执行.所以我有点猜测它与UI线程中分配的默认堆栈大小有关,而不是Powershell(命令行/控制台).

那么如何找到当前线程的最大堆栈大小?

我知道理想情况下,不需要知道这些或设置这些,但看起来它与堆栈大小有关,因为它从console/powershell(命令行应用程序)而不是UI.

注释(下面的线程有点相关.但它没有回答我的问题.可能会给出一些指导)

最大线程堆栈大小.NET?

要获得有关实际问题的更多信息:

StackOverFlowException:是编程错误(递归)还是没有足够的最大默认堆栈大小?

.net c# multithreading

6
推荐指数
2
解决办法
3148
查看次数

当客户端连接到'localhost'上的服务时,为什么System.Net.ServicePoint.ConnectionLimit使用'7FFFFFFF'(Int32.MaxValue/2147483647)?

为什么当客户端连接到'localhost'上的服务时,System.Net.ServicePoint.ConnectionLimit使用'7FFFFFFF'(Int32.MaxValue/2147483647),而如果服务在远程计算机上运行,​​它决定使用'2'作为默认值?

最初我认为如果没有设置servicepoint.connectionlimit,它将是ServicePointManager.DefaultConnectionLimit.但是,我刚刚意识到(一旦我从客户那里得到了一个问题),那就是它的Int32.MaxValue/2147483647.

我做了一些研究(详情请参考下面的链接),但是我无法找到它用于int32.maxvalue的原因.我可以猜测它可能是为了更好的性能,因为输入请求和响应消息不会越过边界.

我的问题:

  1. 为什么Int32.MaxValue如果服务在'localhost'上运行?(我在英语中的任何解释;)我从反射器复制的代码片段也很棒 - 因为我猜想的意图 - 但完全不了解代码:))
  2. 我理解它的性能 - 但从'2'(默认)到'int32.maxvalue'听起来很响.换句话说,只要请求不通过网络,为什么打开尽可能多的TCP连接是可以的.(换句话说 - 为什么默认为int32.maxvalue - 不会有副作用)

一些与此相关的有用链接:

在httpwebrequest中创建TCP连接的方式和位置,以及它与servicepoint的关系如何?

http://blogs.microsoft.co.il/idof/2011/06/20/servicepointmanagerdefaultconnectionlimit-2-depends/

http://msdn.microsoft.com/en-us/library/system.net.servicepoint.connectionlimit(v=vs.110).aspx

http://arnosoftwaredev.blogspot.com/2006/09/net-20-httpwebrequestkeepalive-and.html

Reflector的代码片段

  public int ConnectionLimit
        {
            get
            {
                if ((!this.m_UserChangedLimit && (this.m_IPAddressInfoList == null)) && (this.m_HostLoopbackGuess == TriState.Unspecified))
                {
                    lock (this)
                    {
                        if ((!this.m_UserChangedLimit && (this.m_IPAddressInfoList == null)) && (this.m_HostLoopbackGuess == TriState.Unspecified))
                        {
                            IPAddress address = null;
                            if (IPAddress.TryParse(this.m_Host, out address))
                            {
                                this.m_HostLoopbackGuess = IsAddressListLoopback(new IPAddress[] { address }) ? TriState.True : TriState.False;
                            } …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net servicepoint

6
推荐指数
1
解决办法
2784
查看次数

Task.Result/wait(..)无限期等待,如果在任务链上等待'unwrap''任务,而如果使用'async/await'则成功完成

环境: Windows Server 2012,.net 4.5,visual studio 2013,

注意:不是UI应用程序(因此与着名的async/await/synchronizationcontext问题无关)(参考:http://channel9.msdn.com/Series/Three-Essential-Tips-for-Async/Async-library-methods-should -consider-using-Task-ConfigureAwait-false-)

编辑

其实我的不好 - 这是TYPO导致了交易.我粘贴了下面的样本片段(伪),导致死锁.基本上,我没有基于'childtasks'进行组合,而是在'外部任务'上做了:(.看起来我不应该在看电视时写'异步'代码:).

我已经离开原始代码片段,因为它确实回答了我的第一个问题(与我之前的两个代码片段中的async/await和unwrap的区别).死锁让我分心看到实际的问题:).谢谢大家的评论.

static void Main(string[] args)
{
    Task t = IndefinitelyBlockingTask();
    t.Wait();            
}        
static Task IndefinitelyBlockingTask()
{
    List<Task> tasks = new List<Task>();
    Task task = FooAsync();
    tasks.Add(task);
    Task<Task> continuationTask = task.ContinueWith(t =>
    {
        Task.Delay(10000);
        List<Task> childtasks = new List<Task>();
        ////get child tasks
        //now INSTEAD OF ADDING CHILD TASKS, i added outer method TASKS. Typo :(:)!
        Task wa = Task.WhenAll(tasks/*TYPO*/);
        return wa;
    }, …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading task-parallel-library async-await

6
推荐指数
1
解决办法
2553
查看次数

如果我重写ToString,我还需要重写Equals和GetHashCode吗?

我相信如果我重写Equals,我还需要覆盖GetHashCode,以确保Dictionary等..数据结构按预期工作.

但是,如果我只想重写ToString,我还是必须重写Equals和GetHashCode方法.

.net c# c#-3.0

5
推荐指数
1
解决办法
1352
查看次数

知道为什么这个简单的程序(创建PowerShell会话)占用这么多内存(~150 MB)?

我对powershell编程很新.我正在创建远程会话以编程方式执行某些命令.然而,它消耗了如此多的内存(大约150到200 MB).和更多的会话,更多的内存.

你能帮我解决一下这个问题吗?

  1. 罪魁祸首是什么?
  2. 我该如何解决?

观察:1.执行CreateRunSpace命令后,其消耗约3MB.


有人在创建运行空间时面临同样的问题:

http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/69ccce9d-4696-4886-a5d0-5d2d2e1e4e6d

"可能的PowerShell Runspace处理泄漏"

仍然在调查找到答案,但......

删除pssession使得运行空间释放句柄并修复了内存泄漏.它现在在~30到40MB之间切换.


谢谢!

(仅供参考 - 引用System.Management.Automation.dll)

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation.Runspaces;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int success = 0;
            int fails = 0;
            for (int i = 0; i < 50; i++)
            {
                Runspace rs = RunspaceFactory.CreateRunspace();
                //After this the memory will be incremented by ~3Mb in taskmanager
                rs.Open();
                using (Pipeline pl = rs.CreatePipeline())
                {
                    Command cmd = …
Run Code Online (Sandbox Code Playgroud)

.net c# powershell powershell-2.0 c#-3.0

5
推荐指数
1
解决办法
1920
查看次数

是否可以使用以下'线程安全双重检查懒惰初始化'模式?

框架:.net 4.5

我使用下面的示例代码模式以线程安全的方式初始化变量.最近我一直在阅读一些文章,这些文章解释了"在某些平台上已经破坏了双重检查锁定http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html "但看起来对我来说没问题.我正在使用.net 4.5.

根据评论提出建议

建议使用lazy并让.net框架在处理基于平台的线程安全和内存模型上做大量工作:):http://msdn.microsoft.com/en-us/library/dd642331.aspx

更新

似乎Eric Lippert一直建议不要使用这种模式(现在很困惑:() 这种模式的名称?(答案:使用双重检查锁定进行延迟初始化) C#手动锁定/解锁

更新2

下面的摘录是"像所有删除读锁的技术一样,图7中的代码(类似于我的代码)依赖于强写入顺序.例如,这个代码在ECMA内存模型中是不正确的,除非myValue变得易失,因为初始化LazyInitClass实例的写入可能会延迟到写入myValue之后,允许GetValue的客户端读取未初始化的状态.在.NET Framework 2.0模型中,代码在没有volatile声明的情况下工作.来自http://msdn.microsoft.com/en-us/magazine/cc163715.aspx

而且我也没有使用'volatile',因为许多示例都显示在不同的代码片段中.我也假设它也可以(参考:.NET中双重检查锁定需要volatile修饰符)

****psudeo代码 - 它解释了我正在使用的版本 - 构建于.net 4.5****之上

static private object s_syncObject = new object();
private static string s_lazyInitializedVariable = null;
//is it necessar to make the backing varible volatie?
//private static volatile string s_lazyInitializedVariable = null;
private static string LazyInitializedVariable
{
    get
    {
        if(string.IsNullOrWhiteSpace(s_lazyInitializedVariable))
        {
            lock(s_syncObject)
            {
                if (string.IsNullOrWhiteSpace(s_lazyInitializedVariable))
                {
                    /*
                        * my …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading

5
推荐指数
1
解决办法
880
查看次数