请问一下,有没有像C++运行库里一样memcmp的内存比较函数啊?谢谢了

解决方案 »

  1.   

    直接对内存操作不方便,你可以转换成byte[]进行比较。
      

  2.   

    没有找到直接的函数,只是想找个直接的函数,以提高效率,现在用的是byte[],但也没找到一次性比较的,要求返回值能识别大于,小于,和等于的
      

  3.   

    只是想找个直接的函数,以提高效率=====================================这个认识是错误的,你封装和microsoft封装,在这个简单的比较问题上效率是一样的。难道他们做的就一定比你的好么?你自己写个小函数把,很简单。
      

  4.   

    完全不同,比如C++的内存比较,删除的内存比较,都是用汇编写的运行库,要快得多,MS做,也就可能在内部这样做,当然,如果他没这样做,那是一样的,自己写这样一个是简单,但效率不如C++运行库的快。比较的很大时,就会发现
      

  5.   


    完全不同,比如C++的内存比较,delphi 的内存比较,都是用汇编写的运行库,要快得多,MS做,也就可能在内部这样做,当然,如果他没这样做,那是一样的,自己写这样一个是简单,但效率不如C++运行库的快。比较的很大时,就会发现
      

  6.   

    那你就自己写一个unsafe的方法啊直接到内存中一个一个比较就是了快也快不到哪去,现在的机器都这么快了另外,你可以使用hashcode来比较啊,也不慢吧?
      

  7.   

    sealed class Comparer<T>
        {
            public static int Compare(T obj1, T obj2)
            {
                int size=Marshal.SizeOf(obj1);
                long l1,l2;
                for (int i = 0; i < size/8; i++)
                {
                    l1 = Marshal.ReadInt64(obj1, i * 8);
                    l2 = Marshal.ReadInt64(obj2, i * 8);
                    if (l1 < l2)
                        return -1;
                    if (l1 > l2)
                        return 1;
                }
                for (int i = size - size % 8; i < size; i++)
                {
                    l1 = Marshal.ReadByte(obj1, i * 8);
                    l2 = Marshal.ReadByte(obj2, i * 8);
                    if (l1 < l2)
                        return -1;
                    if (l1 > l2)
                        return 1;
                }
                return 0;
            }
        }比较值类型
      

  8.   

    hash函数选的不好,hashcode容易出现冲突的情况。
    unsafe代码需要编译器开/unsafe,没有普适性通常设计中需要比较大小,则应该实现IComparable或者IComparable<>接口
      

  9.   

    你想要.net和速度和C++一样那几乎不可能