У меня есть объект, который содержит очень большой 3D-массив двойников, и мне нужно запустить новый поток, которому нужны данные этого массива, поэтому мне нужно либо запустить новый поток, передавая объект (который содержит много другие данные тоже) в новый поток, или я просто передаю 3D-массив в новый поток. Для первого решения я бы просто сделал следующее:
MyClass
{
...
public double[,,] _data = new double[x,y,z];
...
}
MyMethod(object MyObject)
{
//do stuff with (MyObject as MyClass)
}
MyClass _newObject = new MyClass();
Thread thread = new Thread(new ParameterizedThreadStart(MyMethod));
thread.Start(_newObject);
Теперь мой вопрос: когда я передаю объект _newObject
в новый поток, этот объект отправляется в поток по ссылке или объект копируется, а копия используется новым потоком? Проблема в том, что объект содержит данные размером около 300 МБ, и было бы почти невозможно, если бы использовались копии, поскольку мне нужно запустить около 10 потоков, которые должны использовать данные этого объекта.
ParameterizedThreadStart
достаточно хорошо, чтобы объяснить, как передаются данные. - person philkark   schedule 06.09.2012