1

与 Firefox 和 Internet Explorer 相比,Chrome Silverlight 的渲染速度非常慢(估计慢了 10 倍)。您可以简单地使用以下示例代码对此进行测试。示例代码演示了在数据网格内呈现 15000 个随机数据。

你有什么意见为什么会发生这种情况?我想到了两个猜测。

  1. 谷歌不希望微软的 Silverlight 在他们的平台上获得广泛的使用。
  2. Chrome 的基础架构以某种方式导致插件渲染缓慢。

XAML 部分:

<UserControl x:Class="sample.view.MemberView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"    
    xmlns:viewmodel="clr-namespace:sample.ViewModel"
    mc:Ignorable="d"
    >
    <UserControl.Resources>
        <viewmodel:MemberViewModel x:Key="viewModel"/>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" VerticalAlignment="Stretch" DataContext="{Binding Source={StaticResource viewModel}}">
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition Height="35"></RowDefinition>
        </Grid.RowDefinitions>
        <data:DataGrid BorderThickness="1" ItemsSource="{Binding Members}" VirtualizingStackPanel.VirtualizationMode="Recycling">
            <data:DataGrid.Columns>
                <data:DataGridTextColumn Header="Name" Width="3*" Binding="{Binding FirstName}"/>
                <data:DataGridTextColumn Header="Surname" Width="3*" Binding="{Binding LastName}"/>
                <data:DataGridTextColumn Header="GSM" Width="3*" Binding="{Binding MobilePhone}"/>
                <data:DataGridTextColumn Header="Email" Width="3*" Binding="{Binding Email}"/>
                <data:DataGridTextColumn Header="BirthDate" Width="2*" Binding="{Binding BirthDate}}"/>
            </data:DataGrid.Columns>
        </data:DataGrid>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row="1">
            <Button Content="Get Random Data" Width="120" Height="25" Margin="5" Command="{Binding GetRandomDataCommand}"/>
        </StackPanel>
    </Grid>
</UserControl>

C#部分:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Net;
using System.Text;
using System.Windows;
using System.Windows.Browser;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace sample.ViewModel
{
    public class MemberModel
    {
        public string FirstName { get; set; }

        public string LastName { get; set; }

        public string MobilePhone { get; set; }

        public string Email { get; set; }

        public DateTime BirthDate { get; set; }
    }

    public class MemberViewModel
    {
        private List<MemberModel> _members;
        public List<MemberModel> Members
        {
            get
            {
                return _members;
            }
            set
            {
                _members = value;
                RaisePropertyChanged(new PropertyChangedEventArgs("Members"));
            }
        }
        public MyCommand GetRandomDataCommand { get; set; }

        public MemberViewModel()
        {
            GetRandomDataCommand = new MyCommand();
        }
    }

    public class MyCommand : ICommand
    {
        public bool CanExecute(object parameter)
        {
            return true;
        }

        public event EventHandler CanExecuteChanged;

        private static Random random = new Random();
        public void Execute(object parameter)
        {
            List<MemberModel> members = new List<MemberModel>();
            for (int i = 0; i < 15000; ++i)
            {
                MemberModel m = new MemberModel();
                m.FirstName = GetRandomString(random.Next(5) + 4);
                m.LastName = GetRandomString(random.Next(5) + 4);
                m.Email = GetRandomString(random.Next(10) + 4);
                m.MobilePhone = GetRandomString(random.Next(12));
                m.BirthDate = DateTime.Now.AddYears(-random.Next(50) - 18).AddMonths(random.Next(12)).AddDays(random.Next(30));
                members.Add(m);
            }
        }

        private string GetRandomString(int length)
        {
            StringBuilder srb = new StringBuilder();
            for (int i = 0; i < length; ++i)
            {
                srb.Append((char)(65 + random.Next(29));
            }
            return srb.ToString();
        }
    }

}
4

2 回答 2

0
  1. 谷歌不希望微软的 Silverlight 在他们的平台上获得广泛的使用。
    答:根据我的经验,这在 Google 方面不是问题。在我向 Microsoft 支持部门发送电子邮件之前几周,我遇到了与您描述的相同的问题,他们建议我使用 IE。他们没有回答我为什么它在 Chrome 上运行如此缓慢。

  2. Chrome 的基础架构以某种方式导致插件渲染缓慢。
    答:同样,这根本不是真的。这个问题来自微软。似乎它不再关心 Silverlight 了。出于这个原因,我们也计划将我们的产品迁移到 ASP.NET MVC。

于 2012-10-12T08:54:23.970 回答
0

梅哈巴,

几天前我遇到了一个msdn页面。它说 Silverlight 支持 x64 仅适用于 IE。支持 x86 的 Safari 和 Chrome 浏览器。因此,你是对的。除此之外,AFAIK firefox 没有 x64 设置。

但对于 Silverlight 5,情况可能会发生变化。

我提供IE,微软也:)

于 2012-10-12T08:25:20.037 回答