C#

310 阅读1分钟

测量代码块运行时间

var watch=new Stopwatch();
watch.Start();
Console.WriteLine($"Upload Elapsed {watch.ElapsedMilliseconds}");
watch.Restart();

当前时间: Console.WriteLine("creat measurement {0} - {1}", _measurement.Id, DateTime.Now);

与C++混合开发

  • 定义委托
 public class Test
        {
            
            [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
            public delegate void AddChunkDelegate(Chunk chunk);

            [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
            public delegate void ErrorHandlerDelegate(string message);
            
            [DllImport("libface.so", CallingConvention = CallingConvention.Cdecl)]
            public static extern bool doExtraction(string video, string mode, uint chunkLength, AddChunkDelegate addChunk, ErrorHandlerDelegate errorHandler);
        }
        
 public static void AddChunk(Chunk chunk)
        {
            Console.WriteLine("meta");
        }
        
        public static void ErrorHandler(string message)
        {
            Console.WriteLine(message);
        }
  • 结构体
     public struct Chunk
        {
            public byte valid { get; set; }
            public uint startFrame { get; set; }
            public uint endFrame { get; set; }
            public uint chunkNumber { get; set; }
            public uint numberChunks { get; set; }
            public ulong firstChunkStartTime_s { get; set; }

            /// <summary>
            /// Start time of chunk in milliseconds from 1970 in UTC
            /// </summary>
            public ulong startTime_s { get; set; }

            public ulong endTime_s { get; set; }

            /// <summary>
            /// Should be same as payload DurationSeconds
            /// </summary>
            public float duration_s { get; set; }

            public IntPtr payload { get; set; }

            public int payloadLength { get; set; }
            public string metadata { get; set; }

            public byte[] Payload
            {
                get
                {
                    var buffer = new byte[payloadLength];
                    Marshal.Copy(payload, buffer, 0, payloadLength);
                    return buffer;
                }
            }
        }