shy*_*man 14 .net c# algorithm concurrency multithreading
我需要生成一个唯一的数字ID来附加到传入的请求.此ID仅用于临时跟踪请求,并在请求完成处理后将被丢弃.此ID仅在此应用程序的上下文中使用,但需要以高性能多线程方式分配.
我正在考虑使用DateTime.Now.Ticks来获取此ID,但是想知道如果同时处理同时请求,DateTime.Now.Ticks是否仍会生成冲突ID?
如果有人可以在多线程环境中建议一种更好的方法来生成这些ID(最好不是像Int这样的Int64),请告诉我.如果只是在递增之前我不必锁定数字,那么像递增数字一样简单就足够了.
非常感谢您的帮助.
您只需要使用一个静态变量,每当您想要另一个唯一值时,该变量就会递增.通过使用Interlocked.Increment方法,您可以使此线程安全且速度非常快......
// Declaration
private static int safeInstanceCount = 0;
// Usage
{
...
Interlocked.Increment(ref safeInstanceCount);
...
}
Run Code Online (Sandbox Code Playgroud)
DateTime.Now为此目的绝对可怕.充其量,你的分辨率为1毫秒; 在最坏的情况下,NT上为17 ms,CE/Compact Framework上为1秒(!).
考虑使用Interlocked.Increment快速,线程安全的计数器的方法.
| 归档时间: |
|
| 查看次数: |
15804 次 |
| 最近记录: |