Mic*_*l J 5 c# performancecounter
我需要在运行时将唯一标识符附加到对象.标识符在应用程序期间必须是唯一的.我计划在我的对象模型的基类中有一个私有成员变量.此变量将在对象初始化时设置,并且该值将在对象的生命周期内保持不变.在应用程序的持续时间内,没有其他对象可以具有相同的标识符.
当然,我可以使用System.Guid,但每个对象需要128位存储空间,而且我希望消耗更少的资源.我尝试使用Int32并使用System.Environment.TickCount属性对其进行初始化,但是我得不到足够的分辨率,并且某些对象最终会分配相同的值.
TickCounter的文档说,TickCount属性将在~29之后滚动到负值,然后在另外29天内回到零.随着时间的推移,我会很乐意交换更多的分辨率.
我还有其他我不了解的选择吗?
Ree*_*sey 13
我建议使用整数值,并在赋值时自动递增.您可以使用Interlocked.Increment使此操作线程安全.
最有可能的是,32位整数对于此任务来说足够大.我建议像这样:
private static newObjectId = int.MinValue;
private static int GetNextId()
{
return Interlocked.Increment(ref newObjectId);
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在基类中使用它来分配新的唯一标识符.
要为对象生成唯一ID,您可以使用我们为您方便地提供的恰当命名的ObjectIDGenerator:
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.objectidgenerator.aspx
请注意,正如注释所指出的,对象id生成器保持对对象的引用,因此它仅适用于您知道将在应用程序的生命周期中存活的对象.如果你打算在更短暂的物体上使用这个东西,那么这不是一个好的解决方案.
您可以构建自己的对象ID生成器,如果您愿意,可以保留弱引用; 这不会那么困难.
| 归档时间: |
|
| 查看次数: |
3155 次 |
| 最近记录: |