Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以XAML为单位的颜色分辨率速度(Silverlight)_Silverlight_Testing_Colors - Fatal编程技术网

以XAML为单位的颜色分辨率速度(Silverlight)

以XAML为单位的颜色分辨率速度(Silverlight),silverlight,testing,colors,Silverlight,Testing,Colors,是否有任何方法可以加速测试以下哪项在XAML中的颜色解析速度更快: Named Color: Orange Hex: #ff6600 Shorthand Hex: #f60 Known Color: DarkOrange 命名颜色:橙色 十六进制:#ff6600 速记十六进制:#f60 已知颜色:DarkOrange 这不仅仅是一种好奇心或学术活动。我有无数的动画和颜色,它们可以大规模地多次改变颜色。我需要尽可能节省一点时间 正在寻找一种方法来测试上面的Silverlight。有什么想法吗?我想

是否有任何方法可以加速测试以下哪项在XAML中的颜色解析速度更快:

Named Color: Orange Hex: #ff6600 Shorthand Hex: #f60 Known Color: DarkOrange 命名颜色:橙色 十六进制:#ff6600 速记十六进制:#f60 已知颜色:DarkOrange 这不仅仅是一种好奇心或学术活动。我有无数的动画和颜色,它们可以大规模地多次改变颜色。我需要尽可能节省一点时间


正在寻找一种方法来测试上面的Silverlight。有什么想法吗?

我想不出一个确定的方法来测试这个,但我把一些东西放在一起,可能会给你一个提示。实际上,我将矩形的颜色绑定到一个类的(string)SelectedColor属性,该类在每次更改时引发PropertyChanged事件。然后,我创建了四个不同的列表集合,它们以您描述的所有不同方式定义了颜色,并在一个后台线程中循环了它们大约10000次,通过分派回UI线程在每个循环上设置SelectedColor属性。复杂的部分只是保持所有线程正确地同步,至少有一个黑客在那里,我每20毫秒循环一次,直到我看到前面的任务已经完成。但它至少迫使UI线程解析颜色字符串,这大概是您感兴趣的

无论如何,在这种测试方法有效的程度上,看起来使用“十六进制”符号可能比其他符号稍微快一点,尽管不会快很多。10次测试运行后我的机器上的平均结果:

十六进制:4596毫秒
命名:4609毫秒
速记十六进制:5018毫秒
已知颜色:5065毫秒

以下代码仅供参考:

public partial class MainPage : UserControl, INotifyPropertyChanged
{
    public MainPage()
    {
        InitializeComponent();

        namedColors.Add("Black");
        namedColors.Add("Black");
        namedColors.Add("Brown");
        namedColors.Add("Cyan");
        namedColors.Add("DarkGray");
        namedColors.Add("Gray");
        namedColors.Add("Green");
        namedColors.Add("LightGray");
        namedColors.Add("Magenta");
        namedColors.Add("Orange");

        hexColors.Add(Colors.Black.ToString());
        hexColors.Add(Colors.Black.ToString());
        hexColors.Add(Colors.Brown.ToString());
        hexColors.Add(Colors.Cyan.ToString());
        hexColors.Add(Colors.DarkGray.ToString());
        hexColors.Add(Colors.Gray.ToString());
        hexColors.Add(Colors.Green.ToString());
        hexColors.Add(Colors.LightGray.ToString());
        hexColors.Add(Colors.Magenta.ToString());
        hexColors.Add(Colors.Orange.ToString());

        knownColors.Add("LawnGreen");
        knownColors.Add("LemonChiffon");
        knownColors.Add("LightBlue");
        knownColors.Add("LightCoral");
        knownColors.Add("LightCyan");
        knownColors.Add("LightGoldenrodYellow");
        knownColors.Add("LightGray");
        knownColors.Add("LightGreen");
        knownColors.Add("LightPink");
        knownColors.Add("LightSalmon");

        shorthandHexColors.Add("#000");
        shorthandHexColors.Add("#111");
        shorthandHexColors.Add("#222");
        shorthandHexColors.Add("#333");
        shorthandHexColors.Add("#444");
        shorthandHexColors.Add("#555");
        shorthandHexColors.Add("#666");
        shorthandHexColors.Add("#777");
        shorthandHexColors.Add("#aaa");
        shorthandHexColors.Add("#bbb");

        LayoutRoot.DataContext = this;
    }

    private List<string> namedColors = new List<string>();
    private List<string> hexColors = new List<string>();
    private List<string> shorthandHexColors = new List<string>();
    private List<string> knownColors = new List<string>();

    private List<double> namedColorDurations = new List<double>();
    private List<double> hexColorDurations = new List<double>();
    private List<double> shorthandHexColorDurations = new List<double>();
    private List<double> knownColorDurations = new List<double>();

    private string selectedColor;
    public string SelectedColor
    {
        get
        {
            return selectedColor;
        }
        set
        {
            if (selectedColor != value)
            {
                selectedColor = value;
                RaisePropertyChanged("SelectedColor");
            }
        }
    }

    private void RaisePropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private bool isTesting = false;
    private void testButton_Click(object sender, RoutedEventArgs e)
    {
        if (isTesting)
        {
            return;
        }
        else
        {
            isTesting = true;
        }
        ThreadPool.QueueUserWorkItem(o =>
        {
            AutoResetEvent resetEvent = new AutoResetEvent(false);
            for (int i = 0; i < 10; i++)
            {
                TestColors(resetEvent, hexColors, lstHexColorDuration, hexColorDurations);
                resetEvent.WaitOne();
                TestColors(resetEvent, namedColors, lstNamedColorDuration, namedColorDurations);
                resetEvent.WaitOne();
                TestColors(resetEvent, shorthandHexColors, lstShorthandHexDuration, shorthandHexColorDurations);
                resetEvent.WaitOne();
                TestColors(resetEvent, knownColors, lstKnownColorDuration, knownColorDurations);
                resetEvent.WaitOne();
            }
            Dispatcher.BeginInvoke(() =>
            {
                lstHexColorDuration.Items.Add(hexColorDurations.Average().ToString());
                lstNamedColorDuration.Items.Add(namedColorDurations.Average().ToString());
                lstShorthandHexDuration.Items.Add(shorthandHexColorDurations.Average().ToString());
                lstKnownColorDuration.Items.Add(knownColorDurations.Average().ToString());
            });
            isTesting = false;
        });
    }

    private int testsFinished = 0;
    private void TestColors(AutoResetEvent resetEvent, List<string> colorList, ListBox resultListBox, List<double> results)
    {
        ThreadPool.QueueUserWorkItem(o =>
            {
                var start = DateTime.Now;
                int testPasses = 10000;
                testsFinished = 0;
                for (int i = 0; i < testPasses; i++)
                {
                    foreach (string color in colorList)
                    {
                        SetColor(color);
                    }
                }
                while (testsFinished < testPasses * colorList.Count)
                {
                    Thread.Sleep(20);
                }
                DateTime finish = DateTime.Now;
                results.Add((finish - start).TotalMilliseconds);
                Dispatcher.BeginInvoke(() => resultListBox.Items.Add((DateTime.Now - start).ToString()));
                resetEvent.Set();
            });
    }

    private void SetColor(string color)
    {
        Dispatcher.BeginInvoke(() =>
            {
                SelectedColor = color;
                Interlocked.Increment(ref testsFinished);
            });
    }
}
公共部分类主页面:UserControl,INotifyPropertyChanged
{
公共主页()
{
初始化组件();
名称颜色。添加(“黑色”);
名称颜色。添加(“黑色”);
命名颜色。添加(“棕色”);
名称颜色。添加(“青色”);
命名颜色。添加(“暗灰色”);
名称颜色。添加(“灰色”);
名称颜色。添加(“绿色”);
名称颜色。添加(“浅灰色”);
名称颜色。添加(“洋红色”);
命名颜色。添加(“橙色”);
添加(Colors.Black.ToString());
添加(Colors.Black.ToString());
添加(Colors.Brown.ToString());
添加(Colors.Cyan.ToString());
添加(Colors.DarkGray.ToString());
添加(Colors.Gray.ToString());
添加(Colors.Green.ToString());
添加(Colors.LightGray.ToString());
添加(Colors.Magenta.ToString());
添加(Colors.Orange.ToString());
knownColors.Add(“LawnGreen”);
Known颜色。添加(“LemonChiffon”);
已知颜色。添加(“浅蓝色”);
Known颜色。添加(“轻珊瑚”);
已知颜色。添加(“淡青色”);
添加(“淡黄花”);
已知颜色。添加(“浅灰色”);
已知颜色。添加(“浅绿色”);
知道颜色。添加(“淡粉色”);
添加(“轻鲑鱼”);
ShortHandHexColor。添加(“#000”);
ShortHandHexColor。添加(“#111”);
ShortHandHexColor。添加(“#222”);
ShortHandHexColor。添加(“#333”);
ShortHandHexColor。添加(“#444”);
ShortHandHexColor。添加(“#555”);
ShortHandHexColor。添加(“#666”);
ShortHandHexColor。添加(“#777”);
ShortHandHexColor。添加(“#aaa”);
ShortHandHexColor。添加(“#bbb”);
LayoutRoot.DataContext=this;
}
私有列表名称颜色=新列表();
私有列表hexColors=新列表();
私有列表shorthandHexColors=新列表();
私有列表knownColors=新列表();
私有列表namedColumurations=新列表();
私有列表hexColorDurations=新列表();
私有列表shorthandHexColorDurations=新列表();
私有列表KnownColutions=新列表();
私有字符串selectedColor;
公共字符串SelectedColor
{
得到
{
返回所选颜色;
}
设置
{
如果(selectedColor!=值)
{
selectedColor=值;
RaisePropertyChanged(“SelectedColor”);
}
}
}
私有void RaisePropertyChanged(字符串propertyName)
{
if(PropertyChanged!=null)
{
PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));
}
}
公共事件属性更改事件处理程序属性更改;
私有布尔ISTEST=假;
私有无效测试按钮\u单击(对象发送方,路由目标)
{
如果(ISTEST)
{
返回;
}
其他的
{
IsTest=真;
}
ThreadPool.QueueUserWorkItem(o=>
{
AutoResetEvent resetEvent=新的AutoResetEvent(假);
对于(int i=0;i<10;i++)
{
TestColors(重置事件、hexColors、LstHexColorDurations、hexColorDurations);
resetEvent.WaitOne();
测试颜色(重置事件、命名颜色、lstNamedColorDuration、命名COLORDURATIONS);
resetEvent.WaitOne();
TestColors(重置事件、shorthandHexColors、lstShorthandHexDuration、shorthandHexColorDurations);
resetEvent.WaitOne();
TestColor(重置事件、knownColors、LstKnownColutions、KnownColutions);
resetEvent.WaitOne();
}
Dispatcher.BeginInvoke(()=>
{
lsthexColorDurations.Items.Add(hexColorDurations.Average().ToString());
lstNamedColorDuration.Items.Add(namedColorDurations.Average().ToString());
lstShorthandHexDuration.Items.Add(shorthandHexColorDurations.Average().ToString());
lstnowncolorduration.Items.Add(knownColorDurations.Average().ToString());
});
ISTest=错误
<UserControl 
x:Class="SilverlightScratch.MainPage"
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:local="clr-namespace:SilverlightScratch"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="500">

<Grid x:Name="LayoutRoot" Background="White" >
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Button Height="30" Width="100" x:Name="testButton" Content="Start Test" Click="testButton_Click" />
    <Rectangle Height="30" Width="100" Fill="{Binding SelectedColor}" Grid.Row="2" />
    <StackPanel Orientation="Horizontal" Grid.Row="1">
        <StackPanel>
            <TextBlock Text="Named Color Duration" />
            <ListBox x:Name="lstNamedColorDuration" />
        </StackPanel>
        <StackPanel>
            <TextBlock Text="Hex Color Duration" />
            <ListBox x:Name="lstHexColorDuration" />
        </StackPanel>
        <StackPanel>
            <TextBlock Text="Shorthand Hex Duration" />
            <ListBox x:Name="lstShorthandHexDuration" />
        </StackPanel>
        <StackPanel>
            <TextBlock Text="Known Colors Duration" />
            <ListBox x:Name="lstKnownColorDuration" />
        </StackPanel>
    </StackPanel>
</Grid>
</UserControl>