小编Nic*_*las的帖子

在 IE 中将动态 SVG 转换为可下载的 PNG

目标 - 使用客户端:

将动态 SVG 绘图(使用 d3js 创建)转换为可下载的 PNG 图像并使用 Internet Explorer 工作。

完成:

在 Chrome 中实现,没问题。一旦我有了 PNG DataURI,它就可以轻松转换为可下载的 PNG blob。

不幸的是,在 IE 中运行相同的代码会产生 SecurityException,当我尝试将画布转换为 PNG DataURI ( canvas.toDataURL )时它会失败。

显然这是一个活跃的IE BUG,我在 StackExchange 上发现其他人也有同样的问题。我相信这与应用于来自其他域(并在画布中绘制)的图像的 CORS 限制有关,但我的 SVG 源自本地页面。

想法

想知道原因是否与我为IMG 元素呈现的 SVG 绘图生成初始 DataURI ( data:image/svg+xml ) 的方式有关。

我尝试了两种替代方法来生成image/svg+xml,base64 和 charset=utf8,但它们没有解决遇到的问题。所以想知道是否是SVG的内容,目前SVG绘图中没有图像。

参考代码:

var rawSvg = new XMLSerializer().serializeToString(svgElement);

var img3 = new Image();
document.body.appendChild(img3);
var canv = document.createElement("canvas");
var canv_ctx = canv.getContext("2d");

img3.onload …
Run Code Online (Sandbox Code Playgroud)

internet-explorer svg canvas todataurl

5
推荐指数
0
解决办法
2443
查看次数

如何优化MySQL中的大表,何时可以从分区中受益?

总之,日期范围分区和内存配置实现了我的目标.

我需要增加分配给innodb_buffer_pool_size的内存,因为默认的8M太低了.Rick James推荐70%的RAM用于此设置,他有很多很棒的信息.

Edlerd对两个建议都是正确的:-)

我将数据拆分为月分区,然后运行6,000行响应查询,最初需要6到12秒.它现在在不到一秒钟内完成(.984/.031).我使用默认的innodb缓冲区大小(innodb_buffer_pool_size = 8M)来运行它,以确保它不仅仅是内存增加.

然后我设置innodb_buffer_pool_size = 4G并以更好的响应运行查询.062/.032.

我还想提一下,增加内存也提高了我的Web应用程序和服务的整体速度,它接收和写入消息到这个表,我很惊讶这个配置设置有多大的不同.我的网络服务器的第一个字节时间(TTFB)现在几乎与MySQL Workbench相当,有时会达到20秒.

我还发现慢查询日志文件是识别问题的一个很好的工具,我在那里看到它表明我的innodb_buffer_pool_size很低并且突出了所有表现不佳的查询.这也确定了我需要索引其他表的区域.

编辑2016-11-12解决方案

我正在重构一个记录遥测数据的大型表,它已经运行了大约4-5个月并且已经产生了大约.平均行数约为5400万条记录.380个字节.

我已经开始看到我的一个原始数据查询的性能滞后,它会在24小时内返回设备的所有日志.

最初我认为它是索引,但我认为这是MySQL需要处理的I/O量.一个典型的24小时查询将包含2.2k 3k到9k记录,我实际上想支持大约7天的导出.

我没有数据库性能调优的经验,所以仍然只是学习绳索.我正在考虑一些策略.

  1. 根据查询原始数据调整复合索引,虽然我认为我的索引没问题,因为解释计划显示100%命中率.
  2. 考虑创建覆盖索引以包括所需的所有行
  3. 按日期实施远程分区: a)保留每月分区.例如,过去6个月 b) 将旧的任何东西移到归档表.
  4. 使用原始数据创建单独的表(垂直分区),并将其与主查询表的ID连接.我的索引正在运行,不确定这是我的问题.
  5. 更改我的查询以批量提取数据,然后按创建的日期限制X排序并继续,直到不再返回任何记录.
  6. 查看服务器配置

1,2(INDEXES): 我会用我的查询修改我的索引,但我认为我很好,因为Explain显示100%命中,除非我读错了.

我会在重建时尝试覆盖索引,但是如何确定设置错误的效果呢?EG插入速度受到影响.

如何在实时环境中最好地监控桌子的性能?

编辑:我刚刚开始使用慢速日志文件,它看起来像是一个很好的查找问题的工具,我想在performance_schema上查询可能是另一种选择?

3(PARTITIONING): 我已经阅读了一些关于分区的内容,并且不确定我的数据大小是否会产生很大的差异.

Rick James提出了大约1M的记录,我是54M,并希望在归档之前保持300M左右,我的桌子是否足够复杂?

我必须自己测试一下,因为我没有任何这方面的经验,这对我来说都是理论上的.如果它不适合我的需要,我只是不想走这条路.

4(通过'加入'细节表进行垂直分区):我不认为我有表扫描问题而且我需要所有行,所以我不确定这种技术是否有益.

5(使用限制并再次获取):如果我在一个请求中使用较少的时间,这会释放服务器吗?我是否会在同一连接上以更多命令为代价看到更好的I/O吞吐量?

6(查看配置):另一部分是审查安装MySQL时使用的默认非开发人员配置,也许有一些设置可以调整?:-)

感谢阅读,热衷于听取任何和所有建议.

以下FYI:

表:

CREATE TABLE `message_log` (
    `db_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `db_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `created` datetime DEFAULT …
Run Code Online (Sandbox Code Playgroud)

mysql indexing partitioning database-performance

5
推荐指数
1
解决办法
619
查看次数

使用C#.NET 4.5的TCP Server可以扩展到成千上万个已连接的客户端

我需要使用C#.NET 4.5+构建TCP服务器,它必须能够舒适地处理至少3,000个连接的客户端,这些客户端每10秒发送一次消息,消息大小为250至500字节。

数据将被分流到另一个进程或队列以进行批处理和记录。

我还需要能够选择一个现有客户端,以便在Windows窗体应用程序中发送和接收消息(大于500字节)。

我之前没有构建过这样的应用程序,因此我的知识是基于我在网上找到的各种问题,示例和文档。

我的结论是:

  1. 无阻塞异步是必经之路。避免创建多个线程和阻塞IO。
  2. SocketAsyncEventArgs-是复杂的,实际上仅在非常大的系统中才需要,顺便说一句,什么构成一个非常大的系统?:-)
  3. BeginXXX方法就足够了(EAP)。
  4. 使用TAP,我可以通过使用Task.Factory.FromAsync简化3.,但它只会产生相同的结果。
  5. 使用全局集合来跟踪连接的tcp客户端

我不确定的是:

  1. 与TCP客户端集合进行交互时,应该使用ManualResetEvent吗?我认为asyc事件将需要锁定对此集合的访问。
  2. 我调用BeginReceive 之后,检测断开连接的客户端的最佳方法。我发现呼叫被卡在等待响应,因此需要清理。
  3. 将消息发送到特定的TCP客户端。我在考虑自定义TCP会话类中的功能以发送消息。同样,在异步模型中,我是否需要创建一个基于计时器的进程来检查消息队列,还是在可以访问TcpClient和关联流的TCP Session类上创建事件?真的对这里的意见感兴趣。
  4. 我想在整个服务中使用一个线程,并在其中使用非阻塞的主体,尤其是在1. ManualResetEvent等的上下文中,我应该特别注意些什么。

感谢您的阅读。我渴望听到建设性的想法或与最佳做法/示例的链接。自从我用C#编码以来已经有一段时间了,如果我的某些问题很明显,我深表歉意。任务,异步/等待对我来说是新的!:-)

sockets tcplistener async-await .net-4.5

1
推荐指数
1
解决办法
1781
查看次数