我试图为一款名为Eve Online的游戏编写一个应用程序,人们在那里挖掘行星的产品。该应用程序基本上是为我训练,并且应该告诉人们他们的操作何时到期,以便他们可以重置。一些玩家有30个角色,有120个行星和200多个定时操作。
我已编写代码将字符存储在SQLite
db中,然后我将每个字符拉2个验证码并返回其设备。此信息存储在2个单独的XML文档中。一个是行星,另一个是行星上的设备。我试图通过以下方式解决所有问题:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace PITimer
{
class GetPlanets
{
private long KeyID, CharacterID;
private string VCode;
string CharName;
public List<long> planets = new List<long>();
public List<string> planetNames = new List<string>();
public List<AllInfo> allInfo = new List<AllInfo>();
public GetPlanets(long KeyID, long CharacterID, string VCode, string CharName)
{
this.KeyID = KeyID;
this.CharacterID = CharacterID;
this.VCode = VCode;
this.CharName = CharName;
}
public async Task PullPlanets()
{
XmlReader lesern = XmlReader.Create("https://api.eveonline.com/char/PlanetaryColonies.xml.aspx?keyID=" + KeyID + "&vCode=" + VCode + "&characterID=" + CharacterID);
while (lesern.Read())
{
long planet = 000000;
string planetName;
planet = Convert.ToInt64(lesern.GetAttribute("planetID"));
planetName = lesern.GetAttribute("planetName");
if ((planet != 000000) && (planetName != null))
{
planets.Add(planet);
planetNames.Add(planetName);
await GetExpirationTimes(planet, planetName);
}
}
}
public async Task GetExpirationTimes(long planetID, string planetName)
{
string planet = planetID.ToString();
XmlReader lesern = XmlReader.Create("https://api.eveonline.com/char/PlanetaryPins.xml.aspx?keyID=" + KeyID + "&vCode=" + VCode + "&characterID=" + CharacterID + "&planetID=" + planet);
while (lesern.Read())
{
string expTime;
expTime = lesern.GetAttribute("expiryTime");
if ((expTime != null) && (expTime != "0001-01-01 00:00:00"))
{
allInfo.Add(new AllInfo(CharName, planetName, Convert.ToDateTime(expTime)));
}
}
}
public List<long> ReturnPlanets()
{
PullPlanets();
return planets;
}
public List<string> ReturnNames()
{
return planetNames;
}
public List<AllInfo> ReturnAllInfo()
{
return allInfo;
}
}
}
这确实有效,它会返回数据,我在Xamarin Android上遇到了ListView
。我的问题是它在运行时会冻结系统。我正在测试2个字符,UI有时会被冻结几秒钟。其他时候它运行良好。但是有30个字符我会遇到麻烦。
我已尝试在我能够想象的每个配置中使用异步和任务解决此问题。它仍然很慢或根本不工作。如何以适用于应用程序的方式进行设置?
它还在背景服务中运行较轻的检查,但是我担心我会使系统紧张。
我拉行星ID并从该运行中获取此XML:
我之前使用过XMLDoc
,但是想到读者会更好更快。