| @@ -61,28 +61,41 @@ namespace Yitter.OrgSystem.TestA | |||||
| } | } | ||||
| } | } | ||||
| [DllImport("yitidgenc.dll", CallingConvention = CallingConvention.StdCall)] | |||||
| [DllImport("yitidgenc.dll", CallingConvention = CallingConvention.Cdecl)] | |||||
| public static extern long NextId(); | public static extern long NextId(); | ||||
| [DllImport("yitidgenc.dll", CallingConvention = CallingConvention.StdCall)] | |||||
| public static extern void SetWorkerId(int workerId); | |||||
| [DllImport("yitidgenc.dll", CallingConvention = CallingConvention.Cdecl)] | |||||
| public static extern void SetWorkerId(uint workerId); | |||||
| [DllImport("yitidgenc.dll", CallingConvention = CallingConvention.Cdecl)] | |||||
| public static extern int TestId(); | |||||
| private static void CallDll() | private static void CallDll() | ||||
| { | { | ||||
| int i = 0; | |||||
| long id = 0; | |||||
| DateTime start = DateTime.Now; | |||||
| try | |||||
| { | |||||
| int i = 0; | |||||
| long id = 0; | |||||
| DateTime start = DateTime.Now; | |||||
| var ids = TestId(); | |||||
| SetWorkerId(1); | |||||
| //SetWorkerId(1); | |||||
| while (i < 50000) | |||||
| while (i < 50000) | |||||
| { | |||||
| id = NextId(); | |||||
| i++; | |||||
| } | |||||
| DateTime end = DateTime.Now; | |||||
| Console.WriteLine("id:" + id); | |||||
| Console.WriteLine($"+++++++++++C# call rust dll, gen 5W, total: {(end - start).TotalMilliseconds} ms"); | |||||
| } | |||||
| catch (Exception ex) | |||||
| { | { | ||||
| id = NextId(); | |||||
| i++; | |||||
| Console.WriteLine(ex.Message); | |||||
| } | } | ||||
| DateTime end = DateTime.Now; | |||||
| Console.WriteLine("id:" + id); | |||||
| Console.WriteLine($"+++++++++++C# call rust dll, gen 5W, total: {(end - start).TotalMilliseconds} ms"); | |||||
| } | } | ||||
| private static void RunSingle() | private static void RunSingle() | ||||
| @@ -8,7 +8,7 @@ set(CMAKE_C_STANDARD 11) | |||||
| aux_source_directory(. DIR_SRCS) | aux_source_directory(. DIR_SRCS) | ||||
| add_subdirectory(idgen) | add_subdirectory(idgen) | ||||
| ##编译动态库 | |||||
| #编译动态库 | |||||
| #set(LIB_SRC YitIdHelper.h YitIdHelper.c) | #set(LIB_SRC YitIdHelper.h YitIdHelper.c) | ||||
| #add_library(YitIdGenLib SHARED ${LIB_SRC}) | #add_library(YitIdGenLib SHARED ${LIB_SRC}) | ||||
| #target_link_libraries(YitIdGenLib idgen) | #target_link_libraries(YitIdGenLib idgen) | ||||
| @@ -11,12 +11,19 @@ extern void SetIdGenerator(IdGeneratorOptions options) { | |||||
| SetOptions(options); | SetOptions(options); | ||||
| } | } | ||||
| extern void SetWorker(uint32_t workerId) { | |||||
| extern void SetWorkerId(uint32_t workerId) { | |||||
| IdGeneratorOptions options = BuildIdGenOptions(workerId); | IdGeneratorOptions options = BuildIdGenOptions(workerId); | ||||
| SetIdGenerator(options); | |||||
| SetOptions(options); | |||||
| //SetIdGenerator(options); | |||||
| } | } | ||||
| extern uint64_t NextId() { | extern uint64_t NextId() { | ||||
| return GetIdGenInstance()->NextId(); | |||||
| IdGenerator *generator = GetIdGenInstance(); | |||||
| uint64_t id = generator->NextId(); | |||||
| free(generator); | |||||
| return id; | |||||
| } | } | ||||
| extern uint64_t TestId() { | |||||
| return 123456; | |||||
| } | |||||
| @@ -5,11 +5,17 @@ | |||||
| #pragma once | #pragma once | ||||
| #include "idgen/IdGenOptions.h" | #include "idgen/IdGenOptions.h" | ||||
| #include "idgen/common.h" | |||||
| __declspec(dllexport) void __stdcall SetIdGenerator(IdGeneratorOptions options); | |||||
| TAP_DLLEXPORT | |||||
| extern void SetIdGenerator(IdGeneratorOptions options); | |||||
| __declspec(dllexport) void __stdcall SetWorker(uint32_t workerId); | |||||
| TAP_DLLEXPORT | |||||
| extern void SetWorkerId(uint32_t workerId); | |||||
| __declspec(dllexport) uint64_t __stdcall NextId(); | |||||
| TAP_DLLEXPORT | |||||
| extern uint64_t NextId(); | |||||
| TAP_DLLEXPORT | |||||
| extern uint64_t TestId() ; | |||||
| @@ -0,0 +1,13 @@ | |||||
| // | |||||
| // Created by zhouzj on 2021/3/28. | |||||
| // | |||||
| #pragma once | |||||
| #ifdef _WIN32 | |||||
| #define TAP_CDECL __cdecl | |||||
| #define TAP_DLLEXPORT __declspec(dllexport) | |||||
| #else | |||||
| #define TAP_CDECL | |||||
| #define TAP_DLLEXPORT __declspec(dllexport) | |||||
| #endif | |||||