我希望得到一些关于如何加速以下功能的建议.具体来说,我希望找到一种更快的方法来将数字(大多数是双数,IIRC那里有一个int)转换为存储为Listview子项的字符串.目前,此功能需要9秒才能处理16个订单!绝对是疯了,特别是考虑到除了处理DateTimes的调用之外,它只是字符串转换.
我认为这是列表视图项目的实际显示速度很慢,所以我做了一些研究,发现将所有子项添加到数组并使用Addrange远比一次添加项目快.我实施了改变,但没有更好的速度.
然后,我在每条线路周围添加了一些秒表,以缩小导致减速的确切原因; 不出所料,对datetime函数的调用是最大的减速,但我很惊讶地看到string.format调用也非常慢,并且考虑到它们的数量,占我的大部分时间.
private void ProcessOrders(List<MyOrder> myOrders)
{
lvItems.Items.Clear();
marketInfo = new MarketInfo();
ListViewItem[] myItems = new ListViewItem[myOrders.Count];
string[] mySubItems = new string[8];
int counter = 0;
MarketInfo.GetTime();
CurrentTime = MarketInfo.CurrentTime;
DateTime OrderIssueDate = new DateTime();
foreach (MyOrder myOrder in myOrders)
{
string orderIsBuySell = "Buy";
if (!myOrder.IsBuyOrder)
orderIsBuySell = "Sell";
var listItem = new ListViewItem(orderIsBuySell);
mySubItems[0] = (myOrder.Name);
mySubItems[1] = (string.Format("{0:g}", myOrder.QuantityRemaining) + "/" + string.Format("{0:g}", myOrder.InitialQuantity));
mySubItems[2] = (string.Format("{0:f}", myOrder.Price));
mySubItems[3] = (myOrder.Local);
if (myOrder.IsBuyOrder)
{
if …Run Code Online (Sandbox Code Playgroud)