所以我在节目设计方面非常业余。我在大学完成了一些课程,但他们都专注于学习语法和非常基本的设计原则。
无论如何,我正在用C#.Net编写一个客户端,通过RPC与rtorrent交互。我将torrent客户端信息存储在ITorrentClient接口中,并将Torrent对象中的torrent信息存储起来。要获取有关torrent的数据,需要从ITorrentClient调用函数,例如:
class Torrent
{
string _hash;
ITorrentClient _client;
public Torrent(ITorrentClient client)
{
this._client = client;
}
public double UploadSpeed
{
get
{
return _client.getTorrentUploadSpeed(_hash);
}
}
}
不幸的是,这意味着如果你的torrent客户端中有大量的种子(就像我一样),你将会在内存中浪费数百个浪费的ITorrentClient。我如何设计我的程序,以便我没有数百个无用的物体漂浮在周围?
谢谢!
答案 0 :(得分:1)
如果ITorrentClient
的实现是引用类型(类)而不是值类型(结构),则每个_client
的{{1}}属性将包含参考至Torrent
,不是实际对象。
考虑:
ITorrentClient
内存中只有var client = new MyTorrentClient(); // TorrentClient implements ITorrentClient
var t1 = new Torrent(client);
var t2 = new Torrent(client);
的一个实例,MyTorrentClient
和t1
拥有对它的引用。