我使用SSDeep fuzzy.dll
对大量文件执行模糊散列。
如果我按顺序运行哈希,那一切都正常。如果我尝试使用多个线程,它就会崩溃(应用程序终止时没有异常信息,日志中没有任何内容)
我假设DLL不是线程安全的,并且有一个线程试图读取另一个内存或类似内存。
我想做的是让每个帖子都有自己的" copy"的dll。请注意,这不是一个实例 - 它全部是静态的/共享的 - 我只是想模仿如果引用dll的2个进程同时运行会发生什么 - 它们是&#d; dd有自己的记忆空间等......
这可能在没有实际生成多个进程的情况下实现吗?
<DllImport("C:\SSDeep\Fuzzy.dll",
EntryPoint:="fuzzy_hash_filename",
CallingConvention:=CallingConvention.Cdecl)>
Private Shared Function fuzzy_hash_filename(
<InAttribute(),
MarshalAsAttribute(UnmanagedType.LPStr)>
ByVal Filename As String,
ByVal Result As StringBuilder) As Integer
End Function
Public Shared Function FuzzyHash(Filename As String) As String
Dim Ret As New StringBuilder
Ret.Capacity = NativeConstants.FUZZY_MAX_RESULT
Dim Success = fuzzy_hash_filename(Filename, Ret)
If Success <> 0 Then
Throw New Exception("SSDeep fuzzy hashing failed")
End If
Return Ret.ToString
End Function
答案 0 :(得分:2)
要做到这一点,你需要两个单独的进程或两个不同的dll副本,例如'fuzzy1.dll'和'fuzzy2.dll'
答案 1 :(得分:1)
您不能在不同的线程中多次加载相同的本机DLL。见Load Dll multiple times to allow multi threading in .Net
我看到了不同的选择:
ThreadPool
很难)