Как стать автором
Обновить

Комментарии 67

А что за единица измерения производительности К? (200К)
тысяч строк
и? тысяч строк которые принимает в максимуме запрос? тысячи строк код которых реализовал функциональность?
Тысяч строк.
Это, конечно же, градусы Кельвина: температура сферического процессора в вакууме при выполнении указанных операций над таблицами БД.
Сферический процессор будет плохо тепло отдавать.
А в вакууме его еще и некуда отдавать.
РЕЗУЛЬТАТЫ СФАЛЬСИФИЦИРОВАНЫ! Наебалово, расходимся :-)
В вакууме тепло передается излучением. Или лампочки накаливания не существует?!
Death Star опасносте.
Для RIA. В основном лоя Silverlight.
Как-то все так сумбурно.
Было бы интересно ещё увидеть колонку SQL Server CE
Хехе, месье знает толк в извращениях :)
Скорее наоборот — для .NET это обкатанное надёжное решение, которое ещё и обновляется отдельно. Ну и принципиально CE ближе к взрослому серверу, чем SQL Lite.
Вы имеете в виду что SQLite «в коробке» это однопользовательская БД и этим все сказано? Правильно ли я понял чем «взрослый» сервер отличается молодого? А нужно ли оно на мобильном девайсе?
Я имею в виду, что SQLite скорее примитивный интерпретатор, а CE более осмысленно подходит к обработке запросов.
Код SQLite один из самых вылизанных. Смысла в портировании не вижу вообще. То есть один смысл есть — работа в условиях, где нельзя использовать неуправлемый код, например ASP.Net хостинг. с другой сторны, на хостинге будет MS SQL Server. Так что практического смысла в портированиинет. Впрочем, сам авторор пишет

Q: Since SQLite has a windows dll and an executable you can download why port to C#?

A: It was an exercise to learn the C# language
этот порт нужен в первую очередь для внедрения в silverlight-приложения для организации внутренней базы данных с доступом чрез sql-запросы. это очень важно и нужно для silverlight-разработчиков.
Если это Silverlight в браузере, то почему нужна локальная база? Silverlight сам по себе (stand alone) лично мне не понятен.
А теперь Silverlight умеет работать вне браузера, ага.
Ну хер знает.
А там нельзя просто вызывать unmanaged dll?
А разве на ASP.NET нельзя использовать неуправляемый код? о_О
Или это уже на шаред-хостингах его запрещают?
Запрещают на shared-хостингах.
А можно узнать причину?
Разве скрипт пользователя хостинга X не будет работать от пользователя системы X?
На никсовых то разрешены ssh, system-функции(кроме «совсем уж шаред») и т.д.
смысл в том чтобы не парится по поводу архитектуры под которой будет запущено это дело.
а думать, что же положить в дистрибутив, x86 или x64 версию — не каждому хочется.
а в каких там случая pinvoke юзается?
А практически во всех.
А как отказ от PInvoke убыстрит код?
Думаете, что родное C# API быстрее, чем вызов WinAPI через PInvoke?
Мне кажется, что должно быть плюс-минус полпроцента.
Или я чего-то не понимаю?
Сам механизм P/Invoke не очень шустрый, ибо состоит из преобразования managed переменных в unmanaged параметры, обратной операции и всякой побочной возни.
А в родном API нет этой возни?
В родном, это в том, который внутренний в .NET и вызывает нативные методы? Там количество этой возни сильно уменьшено за счёт хитрых структур, специальных оптимизаций, небезопасных методов. Поскольку это встроено в ядро .NET, они это могут позволить.
Понятно, спасибо.
Хотя (залез в багтракалку) если отказываешься от P/Invoke для вызова FormatMessageA, то это выигрыш. А если для вызова LockFileEx, то, имхо, никакого.
Это особенности работы p/invoke.
Тормоза при переключении между managed и unmanaged кодом (маршализация и пр.) может сожрать всё преимущество в скорости C кода.
Я вот к чему. Маршализация нужна, хоть она находится в P/Invoke, хоть в родных библиотеках.
Или именно сам P/Invoke тормозной?
Вообще основные тормоза будут при маршализации, я считаю. Функции без параметров будут быстрее запускаться, чем функции с параметром.
Ага, привожу пример:

Ага, привожу пример

[DllImport( «kernel32», SetLastError = true )]
static extern int LockFile(int hFile, int dwFileOffsetLow, int
dwFileOffsetHigh, int nNumberOfBytesToLockLow, int nNumberOfBytesToLockHigh);

Вот чего-то мне кажется что маршализация ничего не стоит.
Пример конкретной штуки которая конкретно в этом приложении C#-Sqlite сделана на P/Invoke. Мне кажется, что маршализация тут не стоит ничего.

С ссылочки цитирую из комментариев «Unfortunately, that extreme precision means a cost of roughly 2.5 seconds per run. Removing the timing code removed that time constraint.»
Возможно, ты имеешь ввиду отсутствие в той функции ссылочнных типов данных?
очень ждем
автор, кстати, говорил, что производительностью вообще не занимался, его интересовал только сам построчный порт с языка Си.

кстати, стоит тут дополнить про название, так как SQLite — это торговая марка, то с названием были по началу проблемы, но потом автор SQLite согласился на название C#-SQLite
Да, в гугл коде выложена переписка. Интересно почитать)
А не проще ли было бы портировать HSQLDB или Apache Derby с Java?
А проще вообще ничего не портировать.
Видимо автор так решил.
Размер бинарника 528KB против 506KB оригинального. Неплохо.

22Кб это да, реальное достижение :D
НЛО прилетело и опубликовало эту надпись здесь
Если учесть, что интерпритатор — ещё несколько десятков метров беиблиотек и всякого кода — то 506 КБ — бесконечно много.
НЛО прилетело и опубликовало эту надпись здесь
Вот уж я бы не сравнивал размеры бинарников, ибо к 528KB надо ещё прибавить 20 метров самого .NET, без которых он не запустится…
НЛО прилетело и опубликовало эту надпись здесь
Это всё понятно. Но, тем не менее, сравнивать файл .NEТ и нативный и говорить, — «ух, ты! какой маленький!» крайне не корректно. Иначе в пределе получаем некий абстрактный язык программирования в котором sqlite занимает один байт, при размере среды выполнения — сто мегабайт. Можно даже до одного бита ужать: 1 — есть sqlite, 0 — нет sqlite :)
НЛО прилетело и опубликовало эту надпись здесь
:) Ну, если конечно так :)
Тогда и к оригинальному бинарнику стоит прибавить ещё десяток метров libc :)
Что будем прибавлять к Windows-версии sqlite.dll? Размер 243 Кб. Из зависимостей — только msvcrt.dll (335 КБ). Итого ~600 Кб.
Будем прибавлять kernel32.dll :)
Фреймворк он есть, он дан нам свыше и включать его в размер программы неправильно.
угу, тогда я сейчас начну страшным голосом кричать какие мальенкие программы получаются на MSVC++ 150 К на программу с гуями! Ну, и ещё пять метров билиотек…
Библиотеки эти MSVC++ ставятся Windows Update для всех? Или их все-таки надо с собой таскать?
В том-то и приккол — что надо с собой таскать. Т.к. они могут быть в системе. Могут не быть. Могут быть, но другой версии. В результате установленнео приложение занимает не много места, но вот инсталлятор должен содеражть все необходимые библотеки — иначе запросто может оказаться (и часто оказывается), что у пользователя чего-то не хвататет в системе.
Бинго!
А .Net Framework с собой таскать не надо. Потому что он ± стандартный.
На какой, извеняюсь, системе? на WinXP? С фигли? не слышал я что-то, чтобы .Net 1,2,3 включали в Windows update.
Windows update его предлагает ваще-то :)
Умеющий слушать, да услышит. Конечно, включали)
Сравнивать некорректно, это да. Но совершенно по другой причине, не из-за рамера платформы .NET (может для полного счастья еще и размер винды прибавим тогда?).
Некорректно сравнивать потому, что CLR-код, и x86/x64-код — это абсолютно разные величины. И сравнение 528KB и 506KB — это вовсе не показатель. И, кстати, зачастую x86-приложения, портированные на .NET, получаются меньше.
Есть провайдер System.Data.SQLite от http://sqlite.phxsoftware.com/
В чем принципиальные различия?
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории