假设我有一个对象,我想在两个单独的任务中使用它的成员。最好的方法是什么?由于结构按值传递,我是否应该将对象更改为结构,然后创建对象的两个单独副本,并将其传递给两个任务?此外,由于对象的属性来自数据库,我想我可以在每个任务中创建实例。
哪种方法最有效?
假设我有一个对象,我想在两个单独的任务中使用它的成员。最好的方法是什么?由于结构按值传递,我是否应该将对象更改为结构,然后创建对象的两个单独副本,并将其传递给两个任务?此外,由于对象的属性来自数据库,我想我可以在每个任务中创建实例。
哪种方法最有效?
正如 Henk 在对 OP 的评论中所暗示的那样……
如果对象的属性仅用于参考,则实例化一次对象并将其传递给多个任务是没有问题的,但是,如果任务要更改对象的属性,则需要处理所有常见的多线程问题。
此外,由于您提到这些对象代表 Db 记录,我猜您是从 ORM 中获取它们的。如果您使用实体框架,它创建的代理类在更改属性时绝对不是线程安全的。
所以真的,这取决于你的使用情况比赛条件。(假设您没有处理大量实体并且内存使用不是问题)
如果对象在任务之间是独立的,它应该是按值的。如果一个对象被两个任务使用,则应该有一个对象。如果对象是独立的(换句话说,2 个对象),则克隆对象,然后传递给任务。我不会使用结构。