pInvoke调用c函数与调用c#函数效率对比

对比一个简单的add操作,代码如下:

        static void perf()
        {
            const int N = 100000000;
            const int M = 123;
            {
                long start = Ezg.ezg_now();
                long ret = 0;
                for (int i = 0; i < N; i++)
                {
                    ret = Ezg.add(ret, i%M);//c函数
                    ret %= M;
                }
                Ezg.log((Ezg.ezg_now() - start) + "");
                Ezg.log("" + ret);
            }
            {
                long add(long a,long b)
                {
                    return a + b;
                }
                long start = Ezg.ezg_now();  
                long ret = 0;
                for (int i = 0; i < N; i++)
                {
                    ret = add(ret, i % M); //本地函数
                    ret %= M;
                }
                Ezg.log((Ezg.ezg_now() - start) + "");
                Ezg.log("" + ret);
            }
            {
                long add(long a, long b)
                {
                    return a + b;
                }
                long start = Ezg.ezg_now();
                long ret = 0;
                for (int i = 0; i < N; i++)
                {
                    ret += (i % M); //直接用+
                    ret %= M;
                }
                Ezg.log((Ezg.ezg_now() - start) + "");
                Ezg.log("" + ret);
            }
        }
继续阅读pInvoke调用c函数与调用c#函数效率对比

网络编程中的scatter/gather I/O(发散/聚合IO)

asio中支持scatter/gather I/O操作,于是就想知道它是否真正的节省了底层系统调用。直接搜asio相关实现的介绍,没找到。自己也没时间翻代码。于是猜应该是系统支持相关API,于是搜 socket scatter/gather I/O,马上就找到了维基百科,还有一篇csdn博客。

Vectored I/O
分散/聚集IO(scatter/gather)及iovec结构体

有API示例代码,示例中是linux代码,在windows平台也有类似API。

原来人家还叫“ Vectored I/O”
核心读写函数可以接受多个数组,由操作系统提供。这样在发送多个小数据包时,可以降低系统调用次数,或者减少数据拷贝次数。

降低boost智能指针开销

1.完全单线程

如果程序是单线程,或者多线程交互由上层调度(比如我这里,c程序是单线程,上层c#程序是多线程),这时可以在编译c库时加上”-DBOOST_SP_DISABLE_THREADS”,降低智能指针开销。

BOOST_SP_DISABLE_THREADS是boost智能指针库定义的一个宏,开启这个宏后,会把底层的atomic计数,换成普通的++。这样就变成了一个普通的计数,去除了不必要的开销。
新版本中是换成了“sp_counted_base_nt.hpp”,道理是一样的。

这样我们就可以用更低的开销,写同样安全的代码,而且不用打破编码习惯,像enable_shared_from_this等着用的写法,一样统统能用,一点不用变。

继续阅读降低boost智能指针开销