相关疑难解决方法(0)

C#动态关键字 - 运行时惩罚?

在C#中将实例定义为动态意味着:

  1. 编译器不执行编译时类型检查,但运行时检查就像它对所有实例一样.

  2. 编译器不执行编译时类型检查,但运行时检查发生,与任何其他非动态实例不同.

  3. 与2相同,这会带来性能损失(微不足道的?潜在的重要性?).

c# performance dynamic

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

内存溢出:拥有越来越多的Microsoft.CSharp.RuntimeBinder.Semantics

我们正在寻找应用程序中的一些内存泄漏,在进行一些操作(在我们的应用程序中加载和关闭一个项目)时,我们知道内存总是增加一点点.

我们已经找到了很多它们,但是现在,10个以上增加最多的类是(根据我们的工具,ANTS Memory Profiler 8.2):

  • Microsoft.CSharp.RuntimeBinder.Semantics.SYMTBL +键
  • Microsoft.CSharp.RuntimeBinder.Semantics.LocalVariableSymbol
  • Microsoft.CSharp.RuntimeBinder.Semantics.CONSTVAL
  • Microsoft.CSharp.RuntimeBinder.Semantics.EXPRCONSTANT
  • Microsoft.CSharp.RuntimeBinder.Semantics.EXPRCLASS
  • Microsoft.CSharp.RuntimeBinder.Semantics.EXPRTYPEOF
  • Microsoft.CSharp.RuntimeBinder.Semantics.EXPRLIST
  • Microsoft.CSharp.RuntimeBinder.Semantics.MethWithInst
  • Microsoft.CSharp.RuntimeBinder.Semantics.CMemberLookupResults
  • Microsoft.CSharp.RuntimeBinder.Semantics.EXPRMEMGRP
  • Microsoft.CSharp.RuntimeBinder.Semantics.EXPRCALL
  • Microsoft.CSharp.RuntimeBinder.Semantics.EXPRWRAP
  • Microsoft.CSharp.RuntimeBinder.Semantics.AggregateDeclaration
  • Microsoft.CSharp.RuntimeBinder.Semantics.Scope

不幸的是,我不知道这是什么,所以我有点难以找到我应该释放的内容.

我检查了实例树但是,它一直用微软的东西.

问题在于,当我们对项目进行"打开/关闭"时,我们会经历很多(大部分)代码.

编辑我们的应用程序的一部分使用dynamic关键字作为某些资源,它可能是链接的.这里的课程不是Disposable,我应该和他们做些什么吗?

编辑2

我很确定这与我的dynamic东西有关,似乎C#在使用动态时创建了一个缓存.但是目前我不知道它为什么会增长(我一直加载相同的类,我将始终拥有完全相同的签名),也不知道如何清除它.

c# profiler memory-leaks dynamic-language-runtime overflow

11
推荐指数
2
解决办法
1496
查看次数

C#动态方法 - IL与表达式树

我正在使用ANTLR构建一个简单的.NET for .NET,将字符串中的脚本转换为Dynamic Method.我的第一个想法是转换为IL操作码,但现在我正在阅读有关DM创建的表达式树.似乎我可以使用表达式树生成任何方法,就像IL代码一样?

谢谢!

代码:https://github.com/ricardoborges/NPortugol2

c# dsl il antlr expression-trees

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

如何获取和设置EmguCV Mat图像的像素值?

我正在使用EmguCV 3.0.0包装器来访问OpenCV 3.0库.我Mat在几个地方使用这门课.以下是单个通道的示例,8x8图像由double值组成:

Mat image = new Mat(8, 8, DepthType.Cv64F, 1);
Run Code Online (Sandbox Code Playgroud)

Image<>类提供用于获取和设置的像素值合理的手段,并且该方法是对相同的Matrix<>类,但是它似乎没有那么明显的Mat类.我弄清楚如何设置单个像素的唯一方法是使用掩码:

// set two pixel values, (0,0) to 9.0, (2, 3) to 42.0

Matrix<byte> mask = new Matrix<byte>(8,8);
mask.Data[0, 0] = 1;
image.SetTo(new MCvScalar(9.0), mask);

mask = new Matrix<byte>(8,8);
mask.Data[2, 3] = 1;
image.SetTo(new MCvScalar(42.0), mask);
Run Code Online (Sandbox Code Playgroud)

感觉它应该是两行,而不是六行,所以我觉得我错过了一些东西.当Mat多个通道时,事情变得更加复杂,因为Matrix<>只有2D,因此必须使用掩模来设置每个通道上的像素.

我无法承受以这种方式设置像素的时间或内存. 如何通过单个方法调用设置像素?

c# image-processing emgucv mat

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

.Net 3.5中通过字符串名称调用方法的最快方法是什么?

所以明显的方法是......

var handler = GetType().GetMethod(methodName, BindingFlags.NonPublic |
                                              BindingFlags.Instance);

handler.Invoke(this, new object[] {e});
Run Code Online (Sandbox Code Playgroud)

我可以添加缓存以保持方法,但我想知道是否有一个完全不同和更快的方式?

.net performance .net-3.5

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

Dynamic selection of method based on runtime parameter type

I've seen similar questions/answers for this posted in the past, but mine differs slightly from the others that I've seen.

Essentially, I have a common interface and several classes that implement/inherit from it. Then, in a separate class, I have methods that must act upon objects given by the interface IObject. However, each of them must be acted upon in different ways, hence why there is a separate declaration of the method for each concrete type that extends IObject.

class …
Run Code Online (Sandbox Code Playgroud)

c#

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

如何为动态变量.net 4.0分配内存?

dynamic是隐式还是显式类型分配?如何在运行时在以下示例的上下文中为动态变量进行内存分配.

由于C#是类型安全的语言,因此对类型安全的影响.

public class Program
{
    static void Main(string[] args)
    {                                                
        dynamic dynamicVar = 10;
        dynamicVar = true;
        dynamicVar = "hello world";
        // compiles fine
        int index = dynamicVar.IndexOf("world");                        
    }        
} 
Run Code Online (Sandbox Code Playgroud)

.net c#-4.0

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

多类型变量C#

我这里有一个奇怪的问题.我有一个项目的约束,其中一个属性的值必须要么是一个数字(int,double,long,等都是可以接受的),一个stringdatetime.Value参数需要是这三个中的一个(错误..如果计算所有可能的数值类型允许它更多一些)类型是因为取决于类型,底层值将需要转换为用于序列化到REST API的特殊格式.为了简化这里的事情,这个课程的基本概念是POCO:

class Foo
{
     public string Name {get;set;}
     public Guid Id {get; set;}
     public UNKNOWN Value {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我考虑过使用泛型,有一个where T : struct约束,但是这仍然留下太多的理论上可以设置的类型,实际上是无效的类型.当然,我可以在构造/设置Value参数期间执行类型检查和抛出异常,但这不像"干净"代码.

我看了一下这个问题你如何使用一个可以是多种类型的变量?但它并没有真正帮助,因为它更多的是处理继承的问题.但是,使用多个可空的私有字段并根据填充的单个属性返回单个属性是可能的,但我觉得必须有更好的方法.

我想到的另一种可能性是使用dynamic类型并执行一些反射魔术来检查基础类型(并执行转换和格式化/抛出异常).我有点害怕这会伤害到性能.

这种情况有什么最佳做法吗?如果没有,有没有比我提到的更好的方法来解决这个问题?

c# generics types dynamic

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

实现通用方法来处理不同整数类型的集合的正确方法是什么?

我正在写一种特殊的System.IO.BinaryWriter. 这位作者应该能够处理整数类型,包括Enum,以及这些类型的集合

abstract class MyBinaryWriter
{
    // ...

    #region Methods: Basic Types: Writing
    public abstract void Write(byte value);
    public abstract void Write(ushort value);
    public abstract void Write(uint value);
    public abstract void Write(ulong value);
    public abstract void Write(string value); 
    #endregion

    #region Methods: Complex Types: Writing
    public virtual void Write<T>(ICollection<T> collection)
    {
        // first write the 32-bit-unsigned-length prefix
        if (collection == null || collection.Count == 0)
        {
            Write((uint)0);
        }
        else
        {
            Write((uint)collection.Count);

            // then write the …
Run Code Online (Sandbox Code Playgroud)

c# generics collections value-type

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

我如何捕获CS7036错误

所以我对C#很新,我一直在学习将我的代码从python转换为C#.现在我偶然发现的问题是:我如何捕获CS7036错误.它在python中被称为"AttributeError",如果你试图实例化一个类而没有所需数量的参数,它就会发生.

public Vector Crossproduct(Vector other)
{
    try
    {
        List<double> output = new List<double>()
        {
            Y* other.Z - other.Y * Z,0 - (X * other.Z- other.X * Z),X* other.Y - other.X * Y
        };
        Vector outputvector = new Vector(output);
        return outputvector;
    }
    catch (Exception)
    {

        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

我用Google搜索了这一点,发现此错误几乎没有任何内容.这是Microsoft的C#文档的链接.这里这里.

我的问题不是如何修复错误,而是如何捕获它,只是让我很清楚.

javascript c#

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

在C#动态关键词表现?

如果使用动态关键字&我们分配一些类型,编译器执行装箱/解拳操作?例如;

dynamic myInstance=null;
object key="BankProject.Payment";
Type myType=ServiceCashe.GetType(key);//get desire type from cache...
myInstance=Activator.CreateInstance(myType); //instanciate myType
Run Code Online (Sandbox Code Playgroud)

c#

0
推荐指数
1
解决办法
129
查看次数