小编Jef*_*eff的帖子

MethodInfo声明类型的等式

我需要检查两个MethodInfos之间的相等性.它们实际上是完全相同的MethodInfo,但ReflectedType除外(也就是说,DeclaringType是相同的,并且方法实际上应该具有相同的主体).有很多方法可以做到这一点,但我正在寻找最有效的方法.

现在我有:

    public static bool AreMethodsEqualForDeclaringType(this MethodInfo first, MethodInfo second)
    {
        first = first.ReflectedType == first.DeclaringType ? first : first.DeclaringType.GetMethod(first.Name, first.GetParameters().Select(p => p.ParameterType).ToArray());
        second = second.ReflectedType == second.DeclaringType ? second : second.DeclaringType.GetMethod(second.Name, second.GetParameters().Select(p => p.ParameterType).ToArray());
        return first == second;
    }
Run Code Online (Sandbox Code Playgroud)

这有点贵,所以我想知道是否有更好的方法......

我应该比较两个方法体吗?例如.

first.GetMethodBody() == second.GetMethodBody()
Run Code Online (Sandbox Code Playgroud)

谢谢.

.net c# reflection

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

字段与属性的实际性能

我正在做一些后期构建CIL编织,它将CIL添加到程序集中的所有方法(换句话说,大量方法).每个方法检查特定值是否为空.示例(C#Reflector'd版本的CIL代码):

// CIL woven region start
if (MyType.Something == null) {
 // ... some new stuff
}
// CIL woven region end
Run Code Online (Sandbox Code Playgroud)

将MyType.Something作为属性与字段的性能影响是什么?我知道我已经读过C#编译器执行特殊的优化,在这种情况下应该没有性能影响......但是在直接CIL代码(没有C#编译器)的情况下......?或者它是允许这些优化的JIT编译器(因此直接CIL代码仍然有益)?

为静态属性的访问器发出OpCode.Call会有比Ldsfld差的性能(请记住,由于程序集中的每个方法都是编织的,因此这涉及成千上万的调用)?

谢谢.

c# reflection reflection.emit

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

在 C# 中委托异步行为的模式

我正在尝试设计一个公开添加异步处理问题的能力的类。在同步编程中,这可能看起来像

   public class ProcessingArgs : EventArgs
   {
      public int Result { get; set; }
   } 

   public class Processor 
   {
        public event EventHandler<ProcessingArgs> Processing { get; }

        public int Process()
        {
            var args = new ProcessingArgs();
            Processing?.Invoke(args);
            return args.Result;
        }
   }


   var processor = new Processor();
   processor.Processing += args => args.Result = 10;
   processor.Processing += args => args.Result+=1;
   var result = processor.Process();
Run Code Online (Sandbox Code Playgroud)

在异步世界中,每个关注点都可能需要返回一个任务,这并不是那么简单。我已经看到了很多方法,但我很好奇人们是否找到了任何最佳实践。一种简单的可能性是

 public class Processor 
   {
        public IList<Func<ProcessingArgs, Task>> Processing { get; } =new List<Func<ProcessingArgs, Task>>();

        public async Task<int> ProcessAsync() …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous async-await

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

单声道编译器即服务(MCS)

我想从我的常规.NET 3.5应用程序中使用Mono的编译器作为服务.

我已经下载了最新的位(2.6.7),在Visual Studio中创建了一个简单的控制台应用程序并引用了Mono.CSharp dll.

然后,在我的控制台应用程序中(直接在线样本):

    Evaluator.Run("using System; using System.Linq;");
    bool ress;
    object res;
    Evaluator.Evaluate(
         "from x in System.IO.Directory.GetFiles (\"C:\\\") select x;",
         out res, out ress);

    foreach (var v in (IEnumerable)res)
    {
        Console.Write(v);
        Console.Write(' ');
    }
Run Code Online (Sandbox Code Playgroud)

这会在Evaluator.Run(第一行)引发异常:

Illegal enum value: 2049.
Parameter name: access
Run Code Online (Sandbox Code Playgroud)

这是因为dll是使用Mono.exe编译的,而不是csc.exe,我相信.

我已经尝试直接从demo-repl.zip文件中的http://tirania.org/blog/archive/2010/Apr-27.html下载Mono.CSharp dll ......这不会引发异常. ..但是在调用Evaluator.Evaluate之后out参数(res)是null ...所以我不确定出了什么问题.没有例外被抛出......

所以,我想弄清楚为什么我从demo-repl.zip下载的dll返回null.

编辑:我弄清楚它为什么返回null.看起来由于某种原因,编译器没有拿起System.Linq命名空间......虽然我不知道为什么......如果我只是评估"System.IO.Directory.GetFiles(\"C:\\ ")",它工作正常.

更新:看起来Mono编译器拾取引用的系统程序集似乎有问题.如果我直接复制其csharp控制台工具的示例:

csharp> var list = new int [] {1,2,3};
csharp> var b = from x in list
   >    where x > 1
   >    select x; …
Run Code Online (Sandbox Code Playgroud)

.net c# compiler-construction mono gmcs

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

带有静态文件问题的ASP.NET VirtualPathProvider

我在Windows 7上运行IIS 7.5.我的ASP .NET应用程序使用VirtualPathProvider.我的VirtualPathProvider返回并渲染了大多数文件(aspx页面).静态文件(css/images)不是.如果我尝试直接浏览它们(或者如果它们被我的虚拟aspx页面引用),它们会产生HTTP 404错误

我已经验证了我的web.config具有为静态文件类型注册的正确处理程序.

这有点奇怪:

  1. 如果我尝试浏览非虚拟gif文件(实际存在于网站根目录下的文件系统上的文件),则呈现正常.

  2. 如果我在Visual Studio中使用WebDev而不是IIS运行,则虚拟gif文件可以正常呈现.

  3. 在调试模式中VirtualPathProvider.GetFile,我可以看到我的VirtualPathProvider在页面返回404错误之前返回一个完全有效的虚拟gif文件实例...所以我知道我的VirtualPathProvider工作得很好.

注意,当我说IIS时,我并不是说在部署环境中.我只是意味着将项目设置切换为使用IIS而不是WebDev.

有任何想法吗?

谢谢.

asp.net virtualpathprovider iis-7.5

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

Azure功能:我们无法检索运行时主密钥

Azure Functions错误.我在门户网站上收到错误

Error:

We are not able to retrieve the runtime master key. Please try again later.
Session Id: d13fceebd4ea4cb1b7fb3d3829dd1406

Timestamp: 2017-08-24T20:04:23.555Z
Run Code Online (Sandbox Code Playgroud)

我在这里尝试了所有的建议:https: //blogs.msdn.microsoft.com/jpsanders/2017/05/09/function-app-error-we-are-not-able-to-retrieve-the-运行时主键/

我正在使用运行时版本1.0.10917但我已经尝试过~1并获得相同的结果.

当我从门户中删除该函数然后重新创建它时,似乎会发生这种情况.对于我们拥有的每项功能,它始终如一地发生.第一次创建函数时,它似乎有效.

azure azure-app-service-plans azure-functions

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

城堡温莎InternalsVisibleTo Silverlight

我正在使用Castle Windsor for SL v2.5.1.0.我有代理内部类(当然接口是公共的,但实现是内部的,所以消费者只知道接口).

我在使用内部类的程序集中使用以下属性

[assembly: InternalsVisibleTo("Castle.Core, PublicKey=002400000480000094000000060200000024000052534131000400000100010077F5E87030DADCCCE6902C6ADAB7A987BD69CB5819991531F560785EACFC89B6FCDDF6BB2A00743A7194E454C0273447FC6EEC36474BA8E5A3823147D214298E4F9A631B1AFEE1A51FFEAE4672D498F14B000E3D321453CDD8AC064DE7E1CF4D222B7E81F54D4FD46725370D702A05B48738CC29D09228F1AA722AE1A9CA02FB")]
[assembly: InternalsVisibleTo("Castle.Windsor, PublicKey=002400000480000094000000060200000024000052534131000400000100010077F5E87030DADCCCE6902C6ADAB7A987BD69CB5819991531F560785EACFC89B6FCDDF6BB2A00743A7194E454C0273447FC6EEC36474BA8E5A3823147D214298E4F9A631B1AFEE1A51FFEAE4672D498F14B000E3D321453CDD8AC064DE7E1CF4D222B7E81F54D4FD46725370D702A05B48738CC29D09228F1AA722AE1A9CA02FB")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
Run Code Online (Sandbox Code Playgroud)

在完整的.NET 4.0模式下,使用.NET 4.0 Castle程序集,这很好,我的类型代理正常.在Silverlight中,使用Silverlight Castle程序集,我得到:

Type ConsoleApplication4.MyTypeToBeProxied is not public. Can not create proxy for types that are not accessible.
Run Code Online (Sandbox Code Playgroud)

此外,只是在解决问题,添加以下似乎没有区别......:

[assembly: InternalsVisibleTo("System.Core, PublicKey=00000000000000000400000000000000")]
[assembly: InternalsVisibleTo("System.Core, PublicKey=" +
"00240000048000009400000006020000002400005253413100040000010001008d56c76f9e8649" +
"383049f383c44be0ec204181822a6c31cf5eb7ef486944d032188ea1d3920763712ccb12d75fb7" +
"7e9811149e6148e5d32fbaab37611c1878ddc19e20ef135d0cb2cff2bfec3d115810c3d9069638" +
"fe4be215dbf795861920e5ab6f7db2e2ceef136ac23d5dd2bf031700aec232f6c6b1c785b4305c" +
"123b37ab")]
Run Code Online (Sandbox Code Playgroud)

我还在运行时验证了SL中动态托管程序集的名称实际上仍然是DynamicProxyGenAssembly2.

有任何想法吗?谢谢.

编辑:

我发现了我认为的问题:

Castle 4.0 for .NET具有:

private bool IsAccessible(Type target)
{
  //      ....
  return ((target.IsPublic || target.IsNestedPublic) || internalAndVisibleToDynProxy);

}
Run Code Online (Sandbox Code Playgroud)

在DefaultProxyBuilder中...和SL 4有

private bool IsAccessible(Type target) …
Run Code Online (Sandbox Code Playgroud)

.net castle-windsor castle-dynamicproxy silverlight-4.0

7
推荐指数
1
解决办法
1315
查看次数

当我的计时器滴答作响.... .NET内存泄漏

我有一个.NET System.Threading.Timer计时器,每隔60秒滴答一次,并在每个滴答声中引入内存泄漏.

在计时器的每个刻度上,代码分配一个IDisposable对象(称为SocketsMessageConnector)......但我确实正确处理它.

我运行了.NET Memory Profiler,每60秒我看到一个新的SocketsMessageConnector类实例在内存中停留(所以在15分钟后,我有15个实例).内存分析器验证实例是否已被释放,但它显示了一个以TimerCallback为根的实例,该实例以_TimerCallback为根,该查询以GCHandle为根...

什么在这里?为什么TimerCallback保持在每个计时器滴答上创建的新实例?

PS.在拍摄快照之前,探查器会强制2个GC,因此我知道它实际上是泄漏,而不仅仅是GC的优化.

.net c# multithreading timer

7
推荐指数
1
解决办法
2703
查看次数

使用Reactive Extensions进行异步队列处理

有几篇关于此的文章,我有这个工作...但我想知道如何为我的Observable订阅一次设置最大数量的任务线程.

我有以下内容来并行化异步保存日志条目:

private BlockingCollection<ILogEntry> logEntryQueue;
Run Code Online (Sandbox Code Playgroud)

 logEntryQueue = new BlockingCollection<ILogEntry>();
 logEntryQueue.GetConsumingEnumerable().ToObservable(Scheduler.TaskPool).Subscribe(SaveLogEntry);
Run Code Online (Sandbox Code Playgroud)

要安排我的保存...但是如何指定调度程序一次使用的最大线程数?

.net system.reactive

7
推荐指数
1
解决办法
4002
查看次数

开源HL7 V3 CDA .NET API

我正在寻找一个开源的HL7 V3临床文档架构API.最好是与nHapi(用于构建特定消息类型的结构化对象模型)完全相同的东西,除了它具有用于创建V3消息的消息类(不仅仅是像nHapi那样的v2.x消息).

我看过MirthConnect,但这主要是基于Java和Javascript的......我还没有在Google看到任何真正强大的候选人,所以我希望这里的某个人可能知道一个.

.net hl7 cda hl7-cda

7
推荐指数
0
解决办法
5447
查看次数